如何使用 jQuery 只选择一个同级?

发布于 2024-12-03 04:10:39 字数 750 浏览 1 评论 0原文

我有这个代码:

<ul>
  <li class="foo">foo text</li>
  <li class="foo2">foo2 text</li>
  <!-- more li here -->
  <li class="bar">bar text</li>
  <li class="bar2">bar2 text</li>
  <!-- more li here -->
  <li class="baz">clickme!</li>
</ul>

并且

$(".baz").click(function() {
    alert("test: " + $(this).siblings(".bar")[0].text()); // Doesn't work
});

siblings(".bar")[0] 不起作用。 (没有弹出警告框,也没有 JavaScript 错误)

仅选择一个同级的正确方法是什么?

jsFiddle 尝试

编辑: 我不想使用 prev()next()

I have this code:

<ul>
  <li class="foo">foo text</li>
  <li class="foo2">foo2 text</li>
  <!-- more li here -->
  <li class="bar">bar text</li>
  <li class="bar2">bar2 text</li>
  <!-- more li here -->
  <li class="baz">clickme!</li>
</ul>

and

$(".baz").click(function() {
    alert("test: " + $(this).siblings(".bar")[0].text()); // Doesn't work
});

siblings(".bar")[0] doesn't work. (no alert box pops up, and no javascript error)

What is the proper way to select one sibling only ?

jsFiddle try

Edit: I don't want to use prev() or next().

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

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

发布评论

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

评论(6

红ご颜醉 2024-12-10 04:10:39

您可以使用 eq 方法将匹配的元素集减少到一个在特定索引处:

$(this).siblings(".bar").eq(0).text()

这将选择集合中的第一个元素。在您的情况下,您可以简单地使用 prev 作为您的元素正在寻找直接在单击的元素之前:

$(this).prev(".bar").text()

您使用的数组表示法的问题是它返回 jQuery 对象中包含的实际 DOM 节点,并且不会有 text 方法。 eq 是执行此操作的等效 jQuery 方法。

You can use the eq method to reduce the matched set of elements to one at a specific index:

$(this).siblings(".bar").eq(0).text()

That will select the first element in the set. In your case, you could simply use prev, as the element you're looking for comes directly before the clicked element:

$(this).prev(".bar").text()

The problem with the array notation method you were using is that it returns the actual DOM node contained within the jQuery object, and that's not going to have a text method. eq is the equivalent jQuery method to do this.

秋日私语 2024-12-10 04:10:39

您还可以使用first 从 jQuery 对象中获取第一个元素:

alert(siblings(".bar").first().text());

You can also grab the first element out of a jQuery object using first:

alert(siblings(".bar").first().text());
淡水深流 2024-12-10 04:10:39

http://api.jquery.com/next/ 和/或 http://api.jquery.com/prev/

所以它会是:

$(this).prev().text());$(this).next().text());

http://api.jquery.com/next/ and/or http://api.jquery.com/prev/.

So it would be:

$(this).prev().text()); or $(this).next().text());

聆听风音 2024-12-10 04:10:39

您可以使用 next() 或 prev();

$(".baz").click(function() {
    alert("test: " + $(this).prev(".bar").text());
});

在这里小提琴 http://jsfiddle.net/fMT5x/2/

You could use next() or prev();

$(".baz").click(function() {
    alert("test: " + $(this).prev(".bar").text());
});

fiddle here http://jsfiddle.net/fMT5x/2/

鱼窥荷 2024-12-10 04:10:39

您可以这样做:

$(".baz").click(function() {
    alert("test: " + $(this).prev.html());
});

但是,您必须确保 .baz 存在前一项

或(更好)

$(".baz").click(function() {
    alert("test: " + $(this).siblings(".bar").eq(0).text());
});

或(更差),仅供参考,切勿使用它:)

$(".baz").click(function() {
    var text = 0;
    $(this).siblings(".bar").each(function(){ text = $(this).text(); break; });
    alert("test: " + text);
});

You can either do:

$(".baz").click(function() {
    alert("test: " + $(this).prev.html());
});

BUT, you have to be sure that a previous item exists to .baz

OR (Better)

$(".baz").click(function() {
    alert("test: " + $(this).siblings(".bar").eq(0).text());
});

OR (WORSE), just for reference, never use it :)

$(".baz").click(function() {
    var text = 0;
    $(this).siblings(".bar").each(function(){ text = $(this).text(); break; });
    alert("test: " + text);
});
云柯 2024-12-10 04:10:39

这里有一个链接,对于了解在 Jquery 中选择同级元素很有用。

如何使用 jQuery 仅选择一个同级

$("selector").nextAll(); 
$("selector").prev(); 

还可以使用 Jquery 选择器查找元素

$("h2").siblings('table').find('tr'); 

有关详细信息,请参阅此链接 JQuery 中的 next()、nextAll()、prev()、prevAll()、find() 和同级

Here is a link which is useful to learn about select a siblings element in Jquery.

How to select only one sibling with jQuery

$("selector").nextAll(); 
$("selector").prev(); 

you can also find an element using Jquery selector

$("h2").siblings('table').find('tr'); 

For more information, refer this link next(), nextAll(), prev(), prevAll(), find() and siblings in JQuery

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