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;