3

给定一个类,获得最接近(向上树)的最佳方法是什么,但它可以是父母的兄弟姐妹。

我想让“errors1”元素以元素“.start”开头

<div>
    ...
    <div class="errors">errors2</div>
    <div>
        .....
        <div class="errors">errors1</div>
        ...
        <div>...</div>
        <div>
            .....
            <div class="start"></div>            
        </div>     
    </div>
</div>

做了一个脚本,但它真的很糟糕,根本不起作用。

http://jsfiddle.net/9DfCJ/1/

谢谢

已编辑: 添加了“...”以增强该结构是动态的。关键是在树上找到最近的“.errors”。

4

6 回答 6

1

调查 jQuery 的prev()命令。例如,要在“start”类的上下文中查找并隐藏先前的“错误”,您可以使用以下命令:

$('.start').click(function(){
  $(this).prev('.errors').hide();
});

在这里阅读更多:http: //api.jquery.com/prev/

更新:

如果它是严重嵌套的,你可能会有更好的运气parent()向上遍历。parent()也将选择器作为参数......没有参数它会抓取当前节点的父节点。

http://api.jquery.com/parent/

于 2011-02-15T04:12:21.127 回答
1
$(this).parent().siblings(':first')
于 2011-02-15T04:23:46.250 回答
1

好问题。下面的代码应该适合你。它循环遍历 的每个父级,.start直到找到带有 的元素.errors。然后它会提醒.errors最接近 的元素的文本.start

jQuery(function($){

    var $start = $('.start'),
        $parents = $start.parents();

    $parents.each(function(){
        var $this = $(this),
            $thisErrors = $this.find('.errors'),
            numErrors = $thisErrors.length;

        if(numErrors){
            alert($thisErrors.eq(numErrors-1).text());
            return false;
        }

    });

});
于 2011-02-15T04:49:04.503 回答
1

将项目作为 jQuery 对象返回的函数,因此它更具可重用性。

这比 Byran 的答案更有效,因为它一次只查看一个级别,而不是每次都通过 find ( http://api.jquery.com/find/ ) 加载所有父级并检查所有级别的子级。

要使用,只需在加载 jQuery 后将该函数粘贴到您的 javascript 文件或脚本标签中。

$('.start').closestParentsAndSibling( '.errors').html('found!');

(function( $ ){
   $.fn.closestParentsAndSibling = function(search) {
        // Get the current element's siblings
        var siblings = this.siblings(search);

        if (siblings.length != 0) { // Did we get a hit?
            return siblings.eq(0);
        }

        // Traverse up another level
        var parent = this.parent();
        if (parent === undefined || parent.get(0).tagName.toLowerCase() == 'body') {
            // We reached the body tag or failed to get a parent with no result.
            // Return the empty siblings tag so as to return an empty jQuery object.
            return siblings;
        }
        // Try again
        return parent.closestParentsAndSibling(search);
   }; 
})( jQuery );
于 2014-10-07T13:30:04.973 回答
0

如果你想上树,得到所有的错误,你可以这样做:

var start = $(".start"),
    current = start.parent(),
    parent = current,
    end_class = "stop",
    get_errors = function(elt) {
        return elt.children(".errors");
    },
    errors = get_errors(current)

    while (parent = current.parent()) {

        $.merge(errors, get_errors(parent));
        if (parent.hasClass(end_class)) {
           break;
        }   
        current = parent;
    }

最后,errors将包含所有错误。

不过,您必须将其添加end_class到您的顶部 div 中。

<div class="stop">
    ...
    <div class="errors">errors2</div>
    ...
</div>
于 2011-02-15T04:48:47.460 回答
0

我做了一些挖掘,发现了一些东西来获取与选择器匹配的第一个元素,从当前元素开始并向上进行:

var myText = $(".start").closest($(".errors")).text(); 

在此处阅读有关它的更多信息,您可以使用您的事件来调用此代码。

于 2012-01-26T05:30:03.737 回答