我正在使用一组jQuery选择器在一些不同的页面上插入一些内容;但是有些页面具有多个选择器,因此内容会在页面上多次插入。例如:
$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first').before('<div>Hello World!</div>');
是否可以在jQuery选择器中使用一种异或,说只应使用其中一个?非常感谢。
答案 0 :(得分:6)
您可以将找到的元素集减少到第一个:
$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first')
.first()
.before('<div>Hello World!</div>');
答案 1 :(得分:4)
从表面上看,似乎可以使用first()
(docs)方法获得第一场比赛。
$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first').first()
当然这取决于第一个总是正确的。由于看起来选择器匹配的元素的使用可能存在一些变化,因此可能存在问题。
jQuery不一定按照选择器的顺序返回元素,而是按照它们在页面上的外观顺序返回,因此这不一定会复制您正在寻找的“异或”行为。 / p>
更确切地说,你需要更明确的东西:
var el = $('div.rColInnerL:first');
if( !el.length ) {
el = $('div.box300.bdr.search:first');
if( !el.length ) {
el = $('h2.blt13:first');
}
}
以下是jQuery不按选择器顺序返回元素的示例:
<body>
<div id="first">first</div>
<div id="second">second</div>
</body>
alert( $('#second, #first')[0].id ); // alerts "first" instead of "second"
即使#second
在选择器中排在第一位,第一个匹配也显示为#first
元素,因为它首先出现在文档中。
答案 2 :(得分:0)
选择的答案对我不起作用。
我用了这个:
var container = $('div.rColInnerL:first')[0] ||
$('div.box300.bdr.search:first')[0] ||
$('h2.blt13:first')[0];
$(container).before('<div>Hello World!</div>');