【问题标题】:querySelectorAll invalid syntaxquerySelectorAll 无效语法
【发布时间】:2012-10-13 01:21:31
【问题描述】:

尝试在错误控制台中执行这两个代码块:

第一个。输出节点列表。

var selector = "*[data-type=day][data-day='23']";
var a = document.querySelectorAll( selector );
alert( a );

第二个。产生错误。

var selector = "*[data-type=day][data-day=23]";
var a = document.querySelectorAll( selector );
alert( a );

为什么data-type=day 是正确的语法而data-day=23 不是?属性值是否应该始终包装为data-type='day'?

这是一个例外,它在第二种情况下引发:

[异常...“指定了无效或非法的字符串”代码:“12” nsresult: "0x8053000c (SyntaxError)" ]

【问题讨论】:

    标签: javascript firefox css-selectors selectors-api


    【解决方案1】:

    浏览器只关注the specification,上面写着:

    属性值必须是 CSS 标识符或字符串。

    在identifiers:

    在 CSS 中,标识符(包括选择器中的元素名称、类和 ID)只能包含字符 [a-zA-Z0-9] 和 ISO 10646 字符 U+00A0 及更高,加上连字符 (-) 和下划线 (_);他们不能以数字开头…

    所以23(以数字开头)必须表示为a string:

    字符串既可以用双引号也可以用单引号

    【讨论】:

    • 什么时候接受data-type=day? var selector = "*[data-type=day]"; 工作正常。
    • 顾名思义,标识符可以包含字母和数字,但不能以数字开头。这意味着它可以以字母开头。
    • @bhovhannes — 因为day 是一个有效的标识符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2019-03-19
    • 2016-01-11
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多