0

我想用一些选择器选择一个元素,并选择最接近<p>它的元素(注意 p 不与前一个元素嵌套)。我该怎么做?我试过closest()了,但这只有在元素嵌套时才有效。

编辑:最接近的定义:

<a id="myelement"></a>
<p id="1"></p>
<p id="2"></p>

在这种情况下,p#1将被选中,假设#myelement是有问题的元素。

4

6 回答 6

4

鉴于您的 HTML 是:

<a id="myelement"></a>
<p id="1"></p>
<p id="2"></p>

最接近()不起作用的原因是:

获取与选择器匹配的第一个元素,从当前元素开始,向上遍历 DOM 树。

如果 'p' 标记始终是下一个元素,则使用next()代替:

$('#myelement').next();

但是,如果您最终可以在第一个标签a和第一个p标签之间添加任何其他元素,那么获得它的一种方法是使用nextAll()

$('#myelement').nextAll('p').eq(0);

还有许多其他方法可以<p>为您获取该元素。

于 2012-09-21T19:15:23.227 回答
1

您可以使用其中一个.siblings().next()在您的情况下使用,但我相信.next如果您的数据始终采用您发布的形式,那将是更好的选择。

这是一个例子:

HTML

<a id="myelement">a</a>
<p id="1">1</p>
<p id="2">2</p>

jQuery

$("#myelement").click(function(){
    console.log($(this).next("p").attr("id"));
    console.log($(this).siblings("p")[0].id);
});​

您将看到上述控制台日志报告和1.

例子

于 2012-09-21T19:24:18.143 回答
1

http://jsfiddle.net/gpinto/PTFgG/1/

function findFirstParagraph() {

   var siblings = $('#myElement').siblings();

    siblings.each(function(index) {
        if ( $(this).attr('id') == 1) {
            $(this).css('background-color', 'red');
        }
    });

}​
于 2012-09-21T19:31:10.633 回答
0

try using next() http://api.jquery.com/next/

as per the latest OP edit: jsfiddle.net/KXPwx/9

于 2012-09-21T19:09:32.573 回答
0

You tried .next() or .prev().. Maybe use .eq(0)??

You can also use .parent() or .parents('.selector')

于 2012-09-21T19:10:29.090 回答
0

尝试.find()

有许多功能可以做类似的事情,但对我来说,使用类似的东西$(this).find( 'selector here' )或创造$(' id or class selector here').find('id/class here')奇迹大声笑。

祝你好运

于 2012-09-21T22:40:16.080 回答