当我在我的程序中遇到这个时,我有点困惑。所以我想知道是否有人知道这可能是什么交易。毕竟我对Jquery相当新。
为什么:
$('[id="' + nameOftheID + '"]').append("Append some text");
为我工作。
然而
$("#" + nameOftheID).append("Append some text");
对我不起作用。 在这种情况下,' nameOftheID'是一个与 span 的ID完全相同的var我试图附加一些文本(我在调试中测试并确认了这一点)。为什么基于ID的选择的普通#选择器不会为我附加文本。但另一种方法呢?
我的代码最终有用。我只想知道为什么A有效,B无效。
我的身份证号码是"规则设定[0]。条件[0]"
答案 0 :(得分:2)
您必须使用\\作为转义字符
#Ruleset\\[0\\]\.Conditions\\[0\\]
以下是两个选择器的差异:
$("#" + nameOftheID).append("Append som text");
上面的代码是按ID选择元素,这里的语法是使用#
。
和
$('[id="' + nameOftheID + '"]').append("Append some text");
这属于属性选择器,您可以在其中限制特定标记的选择,如下所示
$('input[id="inputId"]').append("Append some text");// here it will check the id attribute of input tag only
此外,属性选择器可用于查找值为start的元素,其中包含一些文本,例如查找输入,其中id为&name;' nameOf'
$('input[id^="nameOf"]').append("Append some text");
因此,属性选择器可用于具有更多过滤或更精确选择的get元素。请在选择器here上找到更多信息。
答案 1 :(得分:1)
ID为
Ruleset[0].Conditions[0]
为例
您的ID包含选择器中具有特殊含义的字符。
如果您只是用#
作为前缀,那么[
将启动一个属性选择器,.
将启动一个类选择器。如果在id选择器中使用它们,则必须在选择器中转义具有特殊含义的字符。
#Ruleset\[0\]\.Conditions\[0\]
请注意,您必须在字符串中包含选择器转义字符,并且\
是JavaScript字符串文字的转义字符(为了使{{1}需要转义自身字符串的一部分)。
这些角色在引用的属性选择器中没有特殊含义。
我更喜欢通过首先使用id值保留具有特殊含义的字符来避免此问题。
答案 2 :(得分:0)
我的代码最终有用。我只想知道为什么A有效,B无效。
Sizzle(处理$(...)
事物的jQuery部分)假设ID如下:
"(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+"
即,转义字符,字char或高于\xA0
的ASCII字符。这排除了所有标点符号和正则表达式元字符,如[
。因此,当您#foo[]
函数$
之类的内容时,它将无法被识别并抛出错误:
Uncaught Error: Syntax error, unrecognized expression: #foo[]
另一方面,属性选择器只需要带引号的字符串,而不关心其内容。
答案 3 :(得分:0)
正如我在评论部分中看到的那样,您的id
[]
包含$('[id="' + nameOftheID + '"]')
括号等特殊字符:
此代码
$('[id="Ruleset[0].Conditions[0]"]') // works because of string representation.
代表如下:
\\
这表示id为字符串,因此它可以工作,但对于另一个,情况并非如此,对于该id表示,您必须使用双斜线转义特殊字符{{1}}