无法选择ID =" div:1"

时间:2015-01-21 07:47:27

标签: jquery html css jquery-selectors css-selectors

有点像网络菜鸟的菜鸟,但我有一个有这个标签的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();
}

2 个答案:

答案 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,这似乎不是问题所在。

我仍然会在这里留下答案,也许这有助于遇到类似问题的人。