jQuery选择器:独占OR

时间:2011-01-26 17:52:53

标签: jquery jquery-selectors

我正在使用一组jQuery选择器在一些不同的页面上插入一些内容;但是有些页面具有多个选择器,因此内容会在页面上多次插入。例如:

$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first').before('<div>Hello World!</div>');

是否可以在jQuery选择器中使用一种异或,说只应使用其中一个?非常感谢。

3 个答案:

答案 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元素,因为它首先出现在文档中。

示例: http://jsfiddle.net/XxXXc/

答案 2 :(得分:0)

选择的答案对我不起作用。

我用了这个:

var container = $('div.rColInnerL:first')[0] || 
  $('div.box300.bdr.search:first')[0] || 
  $('h2.blt13:first')[0];

$(container).before('<div>Hello World!</div>');