【问题标题】:jQuery select only children until specific classjQuery只选择孩子直到特定的班级
【发布时间】:2012-04-17 13:19:18
【问题描述】:

我在以下树结构中有一些递归 HTML:

分项 div.content 输入 div.container 分项 div.content 输入 div.container 分项 等等...

这是一个带有工作示例的 jsfiddle:http://jsfiddle.net/HWHRZ/

我还有一个对象,其中包含对每个 .item div 的 jQuery 引用。

我想要做的是,对于任何特定的.item,只选择紧接其下的输入,不包括更深的.container.item 元素中的输入。

为了让事情变得更复杂,并不是每个.item 的输入布局都相同。有时输入可能在其他 div 元素中,因此使用简单的 .find('> .content :input') 选择它们并不总是有效。

我找到了一个解决方案,但是对于大树来说效率低下而且一点也不优雅: $(':input', $item).not($('.container :input', $item)).toggleClass('changed');$item 是我保留在对象中的引用)。该解决方案可以正常工作,但对于任何足够大的树结构来说效率都太低了,not() 将不得不处理大量节点。

简而言之:我需要选择不在特定其他子节点内的特定子节点。

有人知道更有效的方法吗?

【问题讨论】:

  • 所以,你有未闭合的div 标签,大多数(如果不是全部)input 标签上没有自闭合斜线,未闭合的select 元素,多个具有相同@987654335 的元素@...
  • 你能发布一个真正有帮助的 html 的 jsfiddle
  • @DavidThomas。是的。您几乎会认为它只是为了显示树结构而不是实际的 HTML。我会设置一个jsfiddle来帮助你更好地理解。
  • @DavidThomas “自闭合斜线”仅在 XHTML 中需要,在 HTML 中不需要。
  • 我发布了一个 jsfiddle 示例来演示该问题。它还包括一个解决方案,但我正在寻找更好的解决方案。

标签: jquery dom selector parent


【解决方案1】:

我认为

$.each($($(".item")[0]).children(".changed"),function(){
$(this).removeClass("changed")
})

应该可以。

【讨论】:

    【解决方案2】:

    此功能可能会有所帮助:

    $.fn.childrenUntil = function( selector, result)
    {
        result = typeof result !== 'undefined' ? result : new $();
        this.children().each( function(){
           var thisObject = $( this );
            if( thisObject.is( selector ) ) 
                result.push( this );
            else
                thisObject.childrenUntil( selector, result );
        });
        return result;
    }
    

    它遍历树直到遇到选择器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 2017-03-18
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多