jQuery 选择器:异或

发布于 2024-10-14 13:39:11 字数 264 浏览 2 评论 0原文

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

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

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

I'm using a set of jQuery selectors to insert some content on a number of different pages; however some pages feature more than one of the selectors, so the content is inserted more than once on the page. For example:

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

Is it possible to use a kind of exclusive-OR in the jQuery selector, to say that only one of these should be used? Many thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

以歌曲疗慰 2024-10-21 13:39:11

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

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

You can reduce the set of found elements to the first one:

$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first')
.first()
.before('<div>Hello World!</div>');
星軌x 2024-10-21 13:39:11

从表面上看,您似乎可以使用 first()(docs) 方法来获取第一个匹配项。

$('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>
alert( $('#second, #first')[0].id ); // alerts "first" instead of "second"

即使 #second 位于选择器中的第一个,第一个匹配项是显示为 #first 元素,因为它在文档中排在第一位。

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

On the surface it would seem like you could use the first()(docs) method to get the first match.

$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first').first()

Of course this will depend on the first one always being the correct one. Since it seems like there may be some variation in the use of the element that is matched by the selector, it may be an issue.

jQuery does not necessarily return the elements in the order of the selector, but rather in the order of their appearance on the page, so this doesn't necessarily replicate an "exclusive OR" behavior that you're looking for.

To be more precise, you'd need something more explicit:

var el = $('div.rColInnerL:first');
if( !el.length ) {
    el = $('div.box300.bdr.search:first');
    if( !el.length ) {
        el = $('h2.blt13:first');
    }
}

Here's an example of jQuery not returning the elements in the order of the selector:

<body>
    <div id="first">first</div>
    <div id="second">second</div>
</body>
alert( $('#second, #first')[0].id ); // alerts "first" instead of "second"

Even though #second is first in the selector, the first match is shown as the #first element, because it comes first in the document.

Example: http://jsfiddle.net/XxXXc/

沉溺在你眼里的海 2024-10-21 13:39:11

所选答案对我不起作用。

我用过这个:

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

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

The selected answer doesn't work to me.

I used this:

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

$(container).before('<div>Hello World!</div>');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文