JQuery找到具有特定类前缀的第一个父元素

Tim*_*vel 118 jquery jquery-selectors

我想获得具有特定类前缀的第一个父类,假设:

<div class="div-a3332"> 
  <div class="div-a89892">
    <p>
      <div class="div-b2">
        <div id="divid">hi</div>
      </div>
    </p>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

例如,我当前的元素是#divid,我想找到具有类前缀div-a的第一个元素.所以基本上它会选择:

<div class="div-a89892">
Run Code Online (Sandbox Code Playgroud)

Mat*_*all 210

使用.closest()与选择:

var $div = $('#divid').closest('div[class^="div-a"]');
Run Code Online (Sandbox Code Playgroud)

  • 这个选择器需要一个荒谬的循环次数(但它仍然可以很快).如果你需要支持IE6,IE7或IE8,如果你的DOM变得太大,这可能会让你感到沮丧; 当执行一定数量的JS VM指令时,IE会抛出"脚本没有响应"对话框,而不是在一定时间之后.由于这个原因,我已经看到在0.1ms崩溃的Internet Explorer中完成的脚本. (3认同)

Sun*_*pta 52

Jquery后来允许你用这个.parents()方法找到父母.

因此我建议使用:

var $div = $('#divid').parents('div[class^="div-a"]');
Run Code Online (Sandbox Code Playgroud)

这使得所有父节点都与选择器匹配.要获得匹配选择器的第一个父级,请使用:

var $div = $('#divid').parents('div[class^="div-a"]').eq(0);
Run Code Online (Sandbox Code Playgroud)

对于其他此类DOM遍历查询,请查看有关遍历DOM的文档.

  • 最近的是比这更好的解决方案,因为最接近的只会找到第一个匹配,而父母会发现所有匹配都在DOM上.使用最接近的效率显然更高,虽然我同意,但它并不是最好的命名功能. (9认同)