我刚刚从YUI2切换到YUI3。因此,我尝试使用YAHOO.util.Dom.get(ID_OF_ELEMENT)
而不是Y.one('#ID_OF_ELEMENT)'
。对于带有 id img123 的 div ,它可以正常工作,但不适用于 123img 或 123
我还尝试使用Y.all
,但它没有用。在我使用YUI时,我发现使其工作的唯一方法是使用Y.DOM.byId
(显示为alternative in YUI forum)。
所以我做的是用最后一个获取元素并首先得到 Node ,如下所示:
Y.one(Y.DOM.byId(ID_OF_ELEMENT)).append(SOME_HTML_CONTENT);
我不能单独使用Y.DOM.byId
,因为我需要将其内容操作为 Node 。
那么,有没有办法只使用Y.one
? 这是一个YUI错误吗?
我已对YUI forum entry发表评论,因为我不知道这是否真的是我可以填写YUI bug reporting tool的错误。
答案 0 :(得分:8)
如果你使用html4:
ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“ _“),冒号(”:“)和句号(”。“)。
另见this link。
=== UPDATE ===
对于html5:
在使用Y.one(...)
yui的示例中,调用浏览器本机查询选择器:querySelector(selector)
(请参阅here)。
但并非所有浏览器querySelector函数都接受所有允许的html5 id
。例如。 firfox10本机查询选择器对于id
的起始数字失败(在不同的浏览器中尝试this example)。
为什么? Mozilla对选择器使用CSS2.1规范:
Mozilla links in his querySelector documentation到选择器API级别1.
在first chapter "Abstract":
在CSS中广泛使用的选择器是与树结构[SELECT] [CSS21]中的元素匹配的模式。
[SELECT]的Selectors Level 3链接以及chapter 6.5 "ID selectors"中的CSS identifiers:
...
ID选择器包含一个“数字符号”(U + 0023,#),后面紧跟ID值,该值必须是css2.1 identifiers specification。
...
来自关联的this example:
在CSS中,标识符(包括选择器中的元素名称,类和ID)只能包含字符[a-zA-Z0-9]和ISO 10646字符U + 00A0及更高,加上连字符( - )和下划线(_); 他们不能以数字,两个连字符或连字符后跟数字开头。标识符还可以包含转义字符和任何ISO 10646字符作为数字代码(请参阅下一项)。例如,标识符“B& W?”可以写成“B \& W \?”或“B \ 26 W \ 3F”。
=== UPDATE ===
您可以使用以下选择器[id="123"]
。 E.g:
YUI().use('node', function (Y) {
Y.one('[id="123"]').on("click", function (e) {
alert("Hello World!");
});
});
另见{{3}}。