javascript - 将 id 与点击元素 id 或动态内容的最简洁父 id 相匹配

标签 javascript html

我的 HTML:

...included jquery
<div id="step1">
  .. there are more child div
  <div id="step2">
    .. more child div
    <div id="step3">
      Selection 1
    </div>
  </div>
</div>

<div class="class-1">
  <div class="class-2">
    <div class="class-3">
      Section 2
    </div>
  </div>
</div>
...Some more neatest div and element

我的 JavaScript:

$(document).click(function(event){
  let idNo = event.target.id;
  if(idNo == "step1"){
    # Do something
  }else{
    console.log(idNo); //print "step3"
    # Do others
  }
});

我正在尝试检查用户是否单击 id 为“step1”的 div,然后执行某些操作。但 event.target 始终包含子 div 信息,例如本例中 id 为“step3”的 div。 我如何检查单击的项目是否有任何最整洁的父 div id 为“step1” 请记住,我的内容是动态的,因此我无法设置像 $("step1").click();

这样的点击监听器

最佳答案

我们可以编写一个简单的函数来获取元素的所有父代 id:

function getParentIds(el) {
  let ids = [];
  
  while (el.parentNode) {
    let parentId = el.parentNode.id;
    if (parentId)
      ids.push(parentId);
    el = el.parentNode;
  }
  
  return ids;
}

// sample usage
let element = document.querySelector('#three');
console.log(getParentIds(element));
// output: ['two', 'one']
<div id="one">
  <div id="two">
    <div id="three">
      Sample
    </div>
  </div>
</div>

然后,我们可以将此函数附加到我们的目标节点,以确定它们最近的父节点(假设没有中间 id)。

$('step1 *').click(function() {
  var parentIds = getParentIds(this);
  var nearestParent = parentIds[parentIds.length - 1];

  if (nearestParent == 'step1')) {/* do something for immediate children of step 1 */}
  else if (nearestParent == 'step2') {/* do something for immediate children of step 2 */}
  else { /* nearestParent is 'step3' */ }
})

关于javascript - 将 id 与点击元素 id 或动态内容的最简洁父 id 相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58141026/

相关文章:

html - 在页脚中水平重复 x 图像

javascript - 使用 drawImage、Max Width 调整图像大小以适合 Canvas

javascript - 如何使用内联背景颜色样式设置表单输入字段的样式

javascript - 使用 Async/Await 控制操作顺序

html - 使用 jQuery 扩展时, float 到左侧的框会被推到右侧

javascript - HTTP PUT 的目的是什么?

html - 是否可以在 knit 中的 kable 函数中给出分隔列的垂直线?

javascript - HTML5 'required' 表单重置时留下无效的伪类

javascript - 在我的情况下如何设置图像响应

javascript - 如何防止覆盖事件监听器