如果a == "http://foo.bar"
和$(b[0]).attr("href") == "http://foo.bar"
那么为什么下面的代码不返回true:
$("[href^=\"" + a + "\"]", b).length > 0
?
如果a == "http://foo.bar"
和$(b[0]).attr("href") == "http://foo.bar"
那么为什么下面的代码不返回true:
$("[href^=\"" + a + "\"]", b).length > 0
?
因为传递给 jQuery 函数的第二个参数限定了选择器的作用域,也就是说,在b的子项中找到被选择的元素。
举个例子
<div id="one">
<div id="two" title="Test" />
</div>
这将返回 1
$('[title="Test"]','#one').length
这将返回 0
$('[title="Test"]','#two').length
现场示例:http: //jsfiddle.net/mkudf/
根据您的评论,您似乎在将元素添加到 dom 之前正在做一些事情,例如:
var $x = $('<div id="one" /><div id="two" title="Test" />');
alert($('[title="Test"]',$x).length); // alerts "0"
如果不将动态元素包装在一个额外的元素中,我就无法实现你想要的(上面提醒“1”):
var $x = $('<div><div id="one" /><div id="two" title="Test" /></div>');
alert($('[title="Test"]',$x).length); // now alerts "1"
这不应该是一个太大的问题,当添加到 dom 时,你可以采取$x.children()
:
$someOtherElement.after($x.children());