Jquery $(#id)和$([id =])之间有什么区别

时间:2014-05-19 09:17:15

标签: javascript jquery

当我在我的程序中遇到这个时,我有点困惑。所以我想知道是否有人知道这可能是什么交易。毕竟我对Jquery相当新。

为什么:

$('[id="' + nameOftheID + '"]').append("Append some text");

为我工作。

然而

$("#" + nameOftheID).append("Append some text");

对我不起作用。 在这种情况下,' nameOftheID'是一个与 span 的ID完全相同的var我试图附加一些文本(我在调试中测试并确认了这一点)。为什么基于ID的选择的普通#选择器不会为我附加文本。但另一种方法呢?

我的代码最终有用。我只想知道为什么A有效,B无效。

我的身份证号码是"规则设定[0]。条件[0]"

4 个答案:

答案 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}}