通过ID获取动态创建的元素(Jquery)

时间:2013-06-17 03:23:19

标签: javascript jquery html

我正在使用JQuery,我正在通过before()动态创建元素,但我无法通过ID访问这些元素。这是一堆代码,如果可能的话我宁愿不发布它,但我正在检查用作选择器的文本然后检查长度;长度为0,但是我在chrome中使用“inspect element”工具进行交叉引用,ID肯定是应该的。这是新创建元素的已知问题吗?当我通过访问给定类的兄弟来访问元素时它工作得很好,但是现在有多个兄弟姐妹拥有相同的类,并且最有效的方法是使用ID。

当我说我正在检查文本时,这就是我的意思:

alert("id=\"impactPlusMinus~"+questionAnswerNameId+"\"\n"+
$("#impactPlusMinus~"+questionAnswerNameId).length);

4 个答案:

答案 0 :(得分:5)

代字号~不是HTML4中id属性的有效字符。尝试使用其他角色。

  

ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“ _“),冒号(”:“)和句号(”。“)。

来源:HTML4规范。 http://www.w3.org/TR/html4/types.html#type-id

HTML5规范对此并不是那么严格,但是在许多浏览器或jQuery等框架上使用代字号可能会遇到问题。例如,在jQuery中,选择器中的代字号完全意味着其他东西。

答案 1 :(得分:4)

你需要逃离代字号:

$("#impactPlusMinus\\~"+questionAnswerNameId)

答案 2 :(得分:2)

由于您在Id中使用保留关键字,因此您可以将其作为属性值访问,或者如果您直接访问它,则使用\\转义特殊字符。

$('[id="impactPlusMinus~' + questionAnswerNameId+ '"]' 

 $("#impactPlusMinus\\~" + questionAnswerNameId);
来自docs

  

使用任何元字符(例如!“#$%&'()* +,。/:;< =>?@ [] ^`{|}〜)作为文字作为名称的一部分,必须使用两个反斜杠进行转义:\。

答案 3 :(得分:1)

为了避免与jQuery如何确定标识符的外观有什么冲突,特别是在HTML5的命名不太严格的情况下,你可以像这样创建元素引用:

$(document.getElementById('impactPlusMinus~' + questionAnswerNameId));

这确保只使用浏览器来查找元素,然后应用jQuery构造函数。