jquery选择元素的某些“级别”?

时间:2010-02-18 19:07:15

标签: jquery css-selectors

说我有以下标记:

<div>
    <h3><a href="">link I want to select</a></h3>
        <div>
             <h3><a href="">link</a></h3>
        </div>
    <h3><a href="">link I want to select</a></h3>
    <h3><a href="">link I want to select</a></h3>
    <a href="">link</a>
</div>

假设以下......

  • 我想要找到的元素都处于相同的嵌套级别
  • 我可能不知道具体的嵌套元素是什么(所以不能使用特定的选择器)

...是否有一种聪明的方法可以选择'第一个锚标记,以及嵌套在同一级别的所有其他锚标记',以便它返回第1,第3和第4个链接?

更糟糕的情况是,我们需要进入并且只是在我们的HTML中添加特定的类,但如果可以通过纯选择器完成,那就太棒了。

7 个答案:

答案 0 :(得分:9)

不是纯粹的选择器,但是如何:

var depth = $('#myanchor').parents().length;
var all_at_depth = $("a").filter( function() { $(this).parents().length == depth; } );

如果有帮助,您可以使用parentsUntil()来获取#myanchor与特定父级之间的距离。

答案 1 :(得分:1)

结帐siblings():first

答案 2 :(得分:1)

$('a:first').parent().siblings().children('a');

答案 3 :(得分:1)

this怎么样?

$(function () {
// I take it you need some way to get the reference element.
var referenceElement = $('a').eq(0);
// Build the selector by making as many child selectors as our nesting level.
var selector = '';
var currentElement = referenceElement;
while (currentElement[0].parentNode !== document.body) {
    selector = (selector ? '* > ' + selector : '*');
    window.console && window.console.debug(currentElement, '!==', document.body, ' => ', currentElement.parent(), '; selector = ', selector);
    currentElement = currentElement.parent();
}
// Replace the tagName stuff with '*' if you want any element to match.
selector = 'body > ' + selector + ' > ' + referenceElement[0].tagName;
window.console && window.console.log(selector, ' => ', $(selector));

});

答案 4 :(得分:0)

我写了这个jQuery函数,应该可以完成这项工作。

示例:https://jsfiddle.net/xvcby8kL/2/

$.extend({

    /**
     * Returns set of same elements on the same DOM depth
     *
     * @param {string} selector of the referencing element
     * @param [{string} parent, body by default]
     * @returns {jQuery} set of elements
     */
    getSameLevelElements: function (selector, parent) {

        if (typeof parent === 'undefined') {
            parent = 'body';
        }

        var el = $(selector).first();

        if (el.length < 1) {
            return $();
        }

        var depth = el.parents(parent + ' *').length;

        for (var i = 0; i < depth; i++) {
            parent += ' > *';
        }

        selector = parent + ' > ' + el.get(0).tagName.toLowerCase();

        return $(selector);

    }

});

答案 5 :(得分:0)

使用属性Class

<div>
    <h3 class="select" ><a href="">link I want to select</a></h3>
        <div>
             <h3><a href="">link</a></h3>
        </div>
    <h3 class="select" ><a href="">link I want to select</a></h3>
    <h3 class="select" ><a href="">link I want to select</a></h3>
    <a href="">link</a>
</div>

Jquery的:

$(".select").each(function(){
//functionality
});

答案 6 :(得分:-1)

如果要选择h3下的所有链接:

var $links = $('h3 a');

编辑: 对不起,我没有看得那么明显。也许你可以尝试以下(注意这没有测试):

var $links = $(div > * > a);