检查元素(DOM节点)是否是兄弟节点

vsy*_*ync 3 javascript jquery dom

如何检查两个DOM元素是否是兄弟姐妹?

示例DOM结构:

<div>
    <a></a>
    <b></b>
    <p></p>
</div>
<i></i>
Run Code Online (Sandbox Code Playgroud)

测试是否<b>是兄弟姐妹<a>而不是兄弟姐妹<i>

vsy*_*ync 9

jQuery的:

var a = $('a'),
    b = $('b'),
    i = $('i');

a.siblings().is(b); // true (since "b" is sibling of "a")
a.siblings().is(i); // false (since "i" is sibling of "div" and not of "a")
a.siblings().is(a); // false (can't be singling of itself)
Run Code Online (Sandbox Code Playgroud)

香草:

var elm_p = document.querySelector('p');
var elm_a = document.querySelector('a');
var elm_i = document.querySelector('i');

// - iterate all the siblings of elm1 and check if any is elm2.
// - make sure elm1 is a different node than elm2 
// - rely on ES2015 destructuring & Array.some
function checkElementsAreSiblings(elm1, elm2){
  return elm1 != elm2 && [...elm1.parentNode.children].some(child => child == elm2)
}

console.log(
  checkElementsAreSiblings(elm_p, elm_a), // true
  checkElementsAreSiblings(elm_a, elm_p), // true
  checkElementsAreSiblings(elm_a, elm_a), // false
  checkElementsAreSiblings(elm_a, elm_i)  // false
)
Run Code Online (Sandbox Code Playgroud)
<div>
    <a></a>
    <b></b>
    <p></p>
</div>
<i></i>
Run Code Online (Sandbox Code Playgroud)

  • @BenG - 是的,在过去的 7 年里,我一直在 stackoverflow 中这样做。我提出问题并写下答案,以便其他人在谷歌上寻求帮助时可以从中受益。用个人知识帮助社区是非常重要的事情。 (2认同)