检索具有特定数据属性的祖先元素
Retrieve ancestor element with a certain data attribute
如何
通过单击其子元素之一来检索具有特定数据属性的祖先元素?
我需要在单击<span>
或<div>
时获取data-cell
属性。我尝试使用 node.parentElement
,但是当我单击范围时,它会返回div,并且很清楚。
有没有像node.parentElement.dataset.dataCell
这样的东西来获得我需要的东西?
<table>
<tr>
<td class="out" data-cell="3-2-2015">
<div>
<span> Number one </span>
<span> Number two </span>
<span> Number three </span>
</div>
</td>
</tr>
</table>
document.querySelector("table").addEventListener("click", function(e){
var element = e.target;
var found = false;
if (element.tagName != "TABLE")
{
while(element && element.parentElement && element.tagName != "TABLE")
{
if (element.hasAttribute("data-cell") )
{
found = element.getAttribute("data-cell");
break; //stop the loop;
}
element = element.parentElement;
}
}
alert(found);
});
<table>
<tr>
<td class="out" data-cell="3-2-2015">
<div>
<span> Number one </span>
<span> Number two </span>
<span> Number three </span>
</div>
</td>
</tr>
<tr>
<td class="out" >
<div>
<span> Number one </span>
<span> Number two </span>
<span> Number three </span>
</div>
</td>
</tr>
</table>
这将做到这一点:
使用while 循环使用 parentElement
迭代备份 DOM 树。如果找到属性data-cell
则返回元素并中断循环,如果没有,则返回false
。
这里有一种方法可以做到这一点:
.HTML:
<table>
<tr>
<td class="out" data-cell="3-2-2015">
<div class="div clicker">
<span class="span clicker"> Number one </span>
<span class="span clicker"> Number two </span>
<span class="span clicker"> Number three </span>
</div>
</td>
</tr>
</table>
JavaScript:
// generic functions
window.getAncestorWithAttribute = function(elem,attr) {
elem = elem.parentNode;
while (elem) {
if (elem.hasAttribute(attr))
return elem;
elem = elem.parentNode;
} // end while
return null;
}; // end getAncestorWithAttribute()
// event handlers
window.mainClickCallback = function(ev) { alert(getAncestorWithAttribute(ev.target,'data-cell')); ev.stopPropagation(); };
// attach event handlers to target elements
Array.forEach(document.getElementsByClassName('clicker'), function(elem) { elem.addEventListener('click', mainClickCallback ); } );
http://jsfiddle.net/z8fba8jg/4/
document.querySelector("table").addEventListener("click", function(e){
var element = e.target;
var found = false;
if (element.tagName != "TABLE")
{
while(element && element.parentElement && element.tagName != "TABLE")
{
if (element.hasAttribute("data-cell") )
{
found = element.getAttribute("data-cell");
break; //stop the loop;
}
element = element.parentElement;
}
}
alert(found);
});
<table>
<tr>
<td class="out" data-cell="3-2-2015">
<div>
<span> Number one </span>
<span> Number two </span>
<span> Number three </span>
</div>
</td>
</tr>
<tr>
<td class="out" >
<div>
<span> Number one </span>
<span> Number two </span>
<span> Number three </span>
</div>
</td>
</tr>
</table>
相关文章:
- 如何将事件stopPropagation限制为祖先元素
- 如何测试HTML元素的祖先是否有CSS类
- 如何在不使用multipleparent()调用的情况下找到(元素表的)第一个祖先
- 获取一个元素相对于Javascript中一个祖先的位置
- 检索具有特定数据属性的祖先元素
- jQuery 遍历 -- 查找相对于共同祖先的元素
- 获取看起来像选择器的祖先元素
- 新添加的元素无法使用 jQuery API closest() 在 DOM 树中向上遍历其祖先,返回“undefined
- 筛选具有特定类作为祖先的元素
- Vanilla javascript检查元素或祖先是否有类
- 使用jQuery在祖先和后代之间插入元素
- 如何获取所有可能具有祖先的元素,并且它们的所有祖先都没有指定的类
- 检查元素的祖先是否已固定
- 如何确定子元素是否在包含祖先之外
- 使用jQuery在一个元素和它的祖先元素之间选择一个元素的最好方法是什么?
- 查找带有未选中复选框的元素并删除其祖先元素
- 元素或其祖先是类的成员
- 如何使用JQuery获取html元素(PartialView)的祖先元素
- 设置元素的宽度(或高度)为较高祖先元素的百分比
- 在JavaScript中,如果在HTML元素及其祖先上声明了事件触发器,则首先触发