侦听器单击任何元素并读取特定的 HTML-5 自定义属性(如果存在)
Listener for click on ANY element and read particular HTML-5 custom attribute when present?
我想检测何时单击任何元素并检测该元素是否具有特定的 HTML-5 自定义属性(数据测试)。如果它确实具有该特定自定义属性,则从该元素读取 HTML-5 自定义属性。需要这个才能在IE8中工作,而不是使用jQuery。不确定我会怎么做?对于单个页面上的许多元素,自定义属性将具有相同的名称(不唯一)。
添加了下面的代码,当您单击一个元素时,它将获取元素的数据属性并打印数据属性(如果存在)。
.HTML
<div class="data" data-number="1" data-phone="12314" data-manager="Rex">Click one</div>
<div class="data" data-number="2" data-address="New York">Click two</div>
<div class="data">Click three</div>
<h2>Data attributes will be listed below if it exists</h2>
<div id="result"></div>
.JS
var el = document.getElementsByClassName("data");
for(var i= 0; i< el.length; i++){
el[i].addEventListener("click", function (event) {
var div = document.createElement('div');
for (var key in this.dataset) {
var obj = this.dataset[key];
var elem = document.getElementById('result');
var span = document.createElement('span');
div.appendChild(span);
div.className = "block";
span.innerHTML = "data[" + key + "] = " + obj + " ";
elem.appendChild(div);
}
});
}
演示小提琴
更新
addEventListener
在IE8中不起作用,也document.getElementsByClassName
和dataset
。您需要为 IE 提供不同的逻辑。
if (window.attachEvent && !window.addEventListener) {
var el = document.querySelectorAll('.data');
for (var i = 0; i < el.length; i++) {
el[i].attachEvent("onclick", function (event) {
elem = window.event.srcElement.attributes;
var elem;
var div = document.createElement('div');
var element = document.getElementById('result');
for (var j = 0; j < elem.length; j++) {
//console.log("node:", elem.item(j).nodeName);
var str = elem.item(j).nodeName;
var span = document.createElement('span');
div.appendChild(span);
// console.log(str.substring(0, 4));
if (str.substring(0, 4) == "data") {
span.innerHTML = "data[" + elem.item(j).nodeName + "] = " + elem.item(j).value + " ";
} else if (j == (elem.length - 1)) {
span.innerHTML = "No data attributes found";
}
}
div.className = "block";
element.appendChild(div);
});
}
} else {
console.log("in");
var el = document.getElementsByClassName("data");
console.log(el);
for (var i = 0; i < el.length; i++) {
el[i].addEventListener("click", function (event) {
var div = document.createElement('div');
var element = document.getElementById('result');
console.log(this.dataset);
if (Object.keys(this.dataset).length != 0) {
for (var key in this.dataset) {
var obj = this.dataset[key];
var span = document.createElement('span');
div.appendChild(span);
div.className = "block";
span.innerHTML = "data[" + key + "] = " + obj + " ";
element.appendChild(div);
}
} else {
var span = document.createElement('span');
div.appendChild(span);
div.className = "block";
span.innerHTML = "No data attributes found.";
element.appendChild(div);
}
});
}
}
更新的小提琴
注意:上面的代码在IE8中有效,但在IE 9中无效,因为它进入IE9的else块,并且在IE中无法识别数据集。 希望你现在明白了继续前进的想法。
像click
这样的事件会在DOM中冒泡。您可以在document
上捕获它们,并从event
对象本身获取触发事件的元素:
document.addEventListener('click', function (event) {
var customAttrValue = event.target.getAttribute('data-test');
// ... (do your thing with the value)
});
要支持 IE8,您需要将其扩展到:
function doSomethingOnClick (event) {
var customAttrValue = event.target.getAttribute('data-test');
// ... (do your thing with the value)
}
if (document.addEventListener) {
document.addEventListener('click', doSomethingOnClick);
} else {
document.attachEvent('click', doSomethingOnClick);
}
相关文章:
- 设置自动分隔符的自定义属性
- 设置 HTML 自定义属性与在 ID 属性中存储信息
- 有没有任何方法可以将json对象存储在HTML标记的默认/自定义属性中,比如<tr>
- “;idd”;html中的属性?编辑:我可以使用Javascript获得基于自定义属性的元素吗
- 通过 Javascript 将自定义属性添加到 HTML 元素
- HTML 自定义属性在 Jquery 中始终返回 undefined
- 我可以向 html 元素添加自定义属性吗?
- 如何将自定义属性添加到 HTML 环境,该属性将默认为元素的每个新实例上的空对象
- 添加自定义属性以更好地分离 JavaScript 和 HTML
- 侦听器单击任何元素并读取特定的 HTML-5 自定义属性(如果存在)
- HTML - Jquery.在自定义属性中搜索重复值
- Hubspot:HTML元素的自定义属性
- javascript如何获取html样式'的自定义属性值
- html自定义属性合法性
- 通过使用html自定义属性值为html元素添加类名
- 是否有任何方式来分配自定义属性的html元素在它的标签?需要纯html + js解决方案
- 从HTML标记中获取自定义属性
- 如何为html中已经存在的标签创建和使用自定义属性?
- 我可以添加自定义属性的按钮html.它能在所有浏览器中工作吗?
- HTML自定义属性和IE