有点像网络菜鸟的菜鸟,但我有一个有这个标签的div:
<div class="" id=":1" role="treeitem" aria-selected="false" aria-expanded="false" aria-level="1" aria-labelledby=":1.label" aria-setsize="10" aria-posinset="1">
我已经测试过我的jQuery正在运行(目前使用的是2.1.3版本)。 我已经在众多其他SO帖子中测试了推荐的选择器,这些帖子关于选择器中的冒号,然后是其他一些。我已经分别尝试了下面的每个jQuery调用,并且没有一个实际上隐藏了我试图获得的元素。
$(function() {
$("#\\:1").hide();
$("#\:1").hide();
$(":1").hide();
$("\3A1").hide();
$("\3a1").hide();
$("\3A 1").hide();
$("\3a 1").hide();
$('[aria-labelledby="\\:1.label"]').hide();
$('[aria-labelledby="\\:1.label"] *').hide();
$(document.getElementById(":1")).hide();
$(document.getElementById("\:1")).hide();
});
要么没有任何反应,要么上述调用会出现语法错误。
Chrome表示CSS路径是&#39;#\ 3a 1&#39;顺便说一句。
修改 这有效:
$(function() {
setTimeout(function() {
$("#\\:1").hide();
}, 1000);
});
我想问题是div实际上并没有加载。这仍然是一个问题,因为上述解决方案存在缺陷,原因很明显。我会向谷歌集团询问这个API(它是阻止的),也许还有一个回调,当它加载或什么时候。
修改
总noob错误 - 我正在寻找的内容实际上插入了init函数中。这就是为什么在我通常称之为jQuery的时候它不存在的原因;我需要把它放在这里:
init = function() {
Blockly.inject(document.getElementById('blocklyDiv'),
{toolbox: document.getElementById('toolbox')});
Blockly.Xml.domToWorkspace(Blockly.mainWorkspace,
document.getElementById('startBlocks'));
$("#\\:1").hide();
}
答案 0 :(得分:6)
:1
是HTML5中完全有效的id
属性:
id
属性指定其元素unique identifier (ID)。值必须在元素的所有IDs中唯一 home subtree并且必须包含至少一个字符。价值 不得包含任何space characters。
但是,它可能需要一些转义。
CSS - CSS ID选择器
在CSS中,要按ID获取元素,请使用ID selector:
文档语言的ID属性允许作者分配 标识符到文档树中的一个元素实例。 CSS ID 选择器根据其标识符匹配元素实例。一个CSS ID 选择器包含一个“#”,后面紧跟着ID值 必须是标识符。
但是,:1
不是有效的标识符:
在CSS中,identifiers(包括元素名称,类和ID) selectors)只能包含字符[a-zA-Z0-9]和ISO 10646 字符U + 00A0和更高,加上连字符( - )和下划线 (_);它们不能以数字,两个连字符或连字符开头 一个数字。标识符还可以包含转义字符和任何字符 ISO 10646字符作为数字代码(参见下一项)。例如, 标识符“B&amp; W?”可以写成“B \&amp; W \?”或“B \ 26 W \ 3F”。
因此,您无法使用选择器#:1
,但可以将其作为#\:1
转义。
#\:1 {
/* CSS styles */
}
JavaScript - CSS ID选择器
在JavaScript中,您可以使用document.querySelector
来获取与CSS选择器匹配的(第一个)元素。这同样适用于jQuery。
您可以使用CSS.escape
[警告 - 实验技术]来转义字符串,使其成为有效的CSS标识符:
document.querySelector("#" + CSS.escape(":1"));
或者,您可以直接使用#\:1
。但请注意,在JavaScript字符串文字中,字符\
会转义字符,因此"#\:1"
变为"#:1"
。因此,您必须使用其他\
转义\
:
document.querySelector("#\\:1");
请注意,即使您使用CSS.escape
,如果ID包含\
或引号,您也必须在字符串文字中转义它们。
JavaScript - ID
但JavaScript也有document.getElementById
,比CSS选择器更快更简单。
它直接通过其ID获取元素,而不是CSS转义版本:
document.getElementById(":1");
请注意,如果ID包含\
或引号,则必须在字符串文字中对其进行转义。
答案 1 :(得分:2)
来自official documentation for HTML4:
的引用ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“ _“),冒号(”:“)和句号(”。“)。
以:
开头的ID无效。有些浏览器可以使用它,但你不应该依赖它。只用字母开始你的身份证。
在HTML5 this string is allowed中,由于您将文档指定为HTML5,这似乎不是问题所在。
我仍然会在这里留下答案,也许这有助于遇到类似问题的人。