繁体   English   中英

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

[英]Getting dynamically created element by ID (Jquery)

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

这是我说要检查文本时的意思:

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

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

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

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

HTML5规范对此并不严格,但是在许多浏览器或jQuery之类的框架上使用波浪号可能会遇到问题。 例如,在jQuery中,选择器中的波浪号完全意味着其他含义。

您需要逃脱波浪号:

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

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

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

要么

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

来自docs

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

为了避免与jQuery确定标识符外观的方式发生冲突,尤其是在HTML5对命名不太严格的情况下,可以这样创建元素引用:

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

这样可以确保仅使用浏览器查找元素,然后再应用jQuery构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM