【问题标题】:Obtaining element types获取元素类型
【发布时间】:2011-06-12 23:47:43
【问题描述】:

假设我有一个这样的假设 html 布局(虽然假设,但我正在实现类似的东西,但为了这个问题已经对其进行了简化):

<div id='start' class='checkpoint'>
  <ul>
    <li><input name='need_this'/></li>
    <li><input name='need_also'/></li>
    <li>
      <div id='stop' class='checkpoint'>
        <ul>
          <li><input name='ignore_this' /></li>
        </ul>
      </div>
    <li>
      <div>
         <div><input name='need_again' /></div>
      </div>
    </li>
  </ul>
  <input name='need_aswell' />
</div>

我想做的,从 $('#start') 开始,是获取所有具有 'name' 属性的元素,除非它们存在于新的检查点类中。虽然我熟悉 .find() 和 .nextUntil(),但我的理解是,当它们逐步阅读 html 时,它们会在中途遇到“检查点”类时立即停止?我想搜索任何 '.checkpoint' 元素周围和之外,直到#start div 结束。

如果有人能指出我的正确方法,我将不胜感激? (这可能是一些我不熟悉的 jQuery 条件)

【问题讨论】:

    标签: jquery html dom tree find


    【解决方案1】:

    应该这样做:

    $('#start [name]').not('#start .checkpoint [name]')
    

    虽然我不知道这有多高效......


    旁注:input 元素应该在 &lt;form&gt;s 内。

    【讨论】:

    • 嗨 Felix - 谢谢,效果很好。我还可以问一下,对于多功能性,当在插件上下文中使用 'this' 而不是在字符串中使用元素的 id 时,这将如何编写? (特别是,我不确定如何重写 not() 子句以适应 'this')
    • @girlafraid:我猜应该是this.find('[name]').not(this.find('.checkpoint [name]'))
    【解决方案2】:

    这是我唯一能想到的关于你的 HTML 代码:

    $('#start').find('input[name]').each(function()
    {    
        if(!$(this).parents('div[id!=start]').hasClass('checkpoint'))
        {
            $(this).css('background-color', 'green');
        }
    });
    

    jsFiddle 上的演示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 2012-01-13
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多