jQuery选择器:异或

jQuery选择器:异或,jquery,jquery-selectors,Jquery,Jquery Selectors,我使用一组jQuery选择器在许多不同的页面上插入一些内容;但是,有些页面具有多个选择器,因此内容会在页面上插入多次。例如: $('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first').before('<div>Hello World!</div>'); $('div.rColInnerL:first,div.box300.bdr.search:first,h2.blt13:first')

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

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

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

您可以将找到的元素集缩减为第一个元素:

$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first')
.first()
.before('<div>Hello World!</div>');
$('div.rColInnerL:first,div.box300.bdr.search:first,h2.blt13:first')
.first()
.在“你好,世界!”)之前;

从表面上看,您似乎可以使用该方法获得第一个匹配项

$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first').first()
当然,这取决于第一个始终是正确的。由于在使用选择器匹配的元素时可能会有一些变化,这可能是一个问题

jQuery不一定按照选择器的顺序返回元素,而是按照元素在页面上的显示顺序返回,因此这不一定会复制您正在寻找的“异或”行为

更准确地说,您需要更明确的内容:

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>
尽管选择器中的
#second
是第一个,但第一个匹配项显示为
#first
元素,因为它在文档中位于第一位


示例:

所选答案对我不起作用

我用了这个:

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

你能解释一下你想要实现的目标吗?确切的行为是什么?您期望的是什么?似乎他的div可以有一个或多个类,因此可能会被选择多次。是的,但当他说
只能使用其中一个时,很难说他是否指第一个(可以使用
first()
)很抱歉,在大多数情况下,一个页面上只有一个适用的div,但是有一个存在2的边缘案例。在本例中,使用.first()可以解决这个问题,因为我不太在意顺序,主要是避免在页面上进行多次选择。干杯。只有当选择器的顺序与页面上的潜在顺序相同时,此选项才有效。在OP的情况下,它更加复杂,因为它不是一个元素是否存在的问题,而是一个元素是否存在的问题,而是另一个不适用于选择目的的问题。
alert( $('#second, #first')[0].id ); // alerts "first" instead of "second"