0

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

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

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

4 回答 4

5

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

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

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

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

于 2013-06-17T03:29:01.940 回答
4

您需要避开波浪号:

$("#impactPlusMinus\\~"+questionAnswerNameId)
于 2013-06-17T03:30:34.680 回答
2

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

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

或者

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

来自文档

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

于 2013-06-17T03:30:59.980 回答
1

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

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

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

于 2013-06-17T03:36:24.560 回答