我试图找到一种方法来删除标签上的功能。我习惯于jquery,代码就是这样的。
$(document).on("click",".goto-messages:not(done)", function(e){...
...$(".profile-messages").addClass("done");
我正在尝试使用javascript实现相同的功能,但我没有添加类attribut。我也不确定如何添加参数以不触发函数,例如“:没有(完成)”
document.getElementsByTagName("td").onclick = function(){
this.style.background = blue;
this.class
}
如何在javascript中实现此结果? 我想删除单击元素的功能。
也是“this.style.background = blue;”这一行正确的吗?
答案 0 :(得分:1)
你会想要这样的东西(除非你提供一些HTML),例如使用所有浏览器都不支持的element.classList。但是你可以使用类似domtokenlist library的东西,它可以在所有浏览器中提供良好的支持,或者在Adding and Removing Classes, with simple cross-browser JavaScript中可以找到一些RegEx。至于跨浏览器添加事件,而不是使用addEventListener,您可以查看以下How to make this Javascript function work in IE Browser?或在SO上搜索addEvent
。
HTML
<table>
<theader>
<tr>
<th>Mesages A</th>
<th>Mesages B</th>
</tr>
</theader>
<tbody>
<tr>
<td class="profile-messages">Message1</td>
<td class="profile-messages">Message2</td>
</tr>
<tr>
<td class="profile-messages">Message3</td>
<td class="profile-messages">Message4</td>
</tr>
<tr>
<td class="profile-messages">Message5</td>
<td class="profile-messages">Message6</td>
</tr>
</tbody>
</table>
CSS
.profile-messages {
background-color: red;
}
.done {
background-color: blue;
}
的Javascript
document.addEventListener("click", function (evt) {
if (evt.target.tagName.toUpperCase() === "TD" && evt.target.classList.contains("profile-messages")) {
evt.target.classList.add("done");
}
}, false);
在 jsfiddle
上答案 1 :(得分:0)
document.getElementsByTagName()
返回NodeList,您必须迭代它:
var nodes = document.getElementsByTagName("td");
for (var i=0, len = nodes.length; i<len; i++) {
nodes.item(i).onclick = function () {
// do something
};
}
将document.querySelectorAll()
用于类似CSS的选择器:
var nodes = document.querySelectorAll(".goto-messages:not(.done)");