diff --git a/src/browser/tests/document/query_selector_attributes.html b/src/browser/tests/document/query_selector_attributes.html index a6f9cc0f..522638e9 100644 --- a/src/browser/tests/document/query_selector_attributes.html +++ b/src/browser/tests/document/query_selector_attributes.html @@ -111,3 +111,15 @@ const containerDataTest = document.querySelector('#container [data-test]'); testing.expectEqual('First', containerDataTest.innerText); + + + + diff --git a/src/browser/webapi/selector/Parser.zig b/src/browser/webapi/selector/Parser.zig index e188c4e7..376bbcdc 100644 --- a/src/browser/webapi/selector/Parser.zig +++ b/src/browser/webapi/selector/Parser.zig @@ -87,15 +87,35 @@ pub fn parseList(arena: Allocator, input: []const u8, page: *Page) ParseError![] var comma_pos: usize = trimmed.len; var depth: usize = 0; + var in_quote: u8 = 0; // 0 = not in quotes, '"' or '\'' = in that quote type var i: usize = 0; while (i < trimmed.len) { const c = trimmed[i]; + if (in_quote != 0) { + // Inside a quoted string + if (c == '\\') { + // Skip escape sequence inside quotes + i += 1; + if (i < trimmed.len) i += 1; + } else if (c == in_quote) { + // Closing quote + in_quote = 0; + i += 1; + } else { + i += 1; + } + continue; + } switch (c) { '\\' => { // Skip escape sequence (backslash + next character) i += 1; if (i < trimmed.len) i += 1; }, + '"', '\'' => { + in_quote = c; + i += 1; + }, '(' => { depth += 1; i += 1;