我如何误用选择器的开头?

Rob*_*b F 2 javascript jquery selector

如果a == "http://foo.bar"$(b[0]).attr("href") == "http://foo.bar"

那么为什么以下代码不会返回true:

$("[href^=\"" + a + "\"]", b).length > 0
Run Code Online (Sandbox Code Playgroud)

Jam*_*iec 5

因为传递给jQuery函数的第二个参数是选择器的范围,也就是说,在b 的节点中找到所选元素.

所以举个例子

<div id="one">
   <div id="two" title="Test" />
</div>
Run Code Online (Sandbox Code Playgroud)

这将返回1

$('[title="Test"]','#one').length 
Run Code Online (Sandbox Code Playgroud)

这将返回0

$('[title="Test"]','#two').length 
Run Code Online (Sandbox Code Playgroud)

实例:http://jsfiddle.net/mkudf/


根据您的评论,在将元素添加到dom之前,您似乎正在做一些事情,所以通过示例:

var $x = $('<div id="one" /><div id="two" title="Test" />');
alert($('[title="Test"]',$x).length); // alerts "0"
Run Code Online (Sandbox Code Playgroud)

我没有办法实现你想要的东西(上面提醒"1")而没有将动态元素包装在一个额外的元素中:

var $x = $('<div><div id="one" /><div id="two" title="Test" /></div>');
alert($('[title="Test"]',$x).length); // now alerts "1"
Run Code Online (Sandbox Code Playgroud)

这不应该是一个太大的问题,当你添加到dom时你可以采取$x.children():

$someOtherElement.after($x.children());
Run Code Online (Sandbox Code Playgroud)