我无法相信我在google中找不到此内容 - 我需要为div
添加一个名为checkField
的其他类名:
<div id="wth" class="checkField"><label>Ok whatever</label></div>
document.getElementById("wth").className="error"; // This works
document.getElementsByClassName("field").className="error"; // Doesn't work
我试过了:
document.getElementsByClassName("field").getElementsByTagName("label").className="error";
^也行不通。
有人可以给我一些建议吗?我太习惯了JQuery。
答案 0 :(得分:1)
您需要将该类添加到当前值:
document.body.className += " foo"; // adds foo class to body
某些浏览器支持classList
,它提供了在元素上添加,删除和切换类的方法。例如,您可以添加如下的新类:
document.body.classList.add("newClass");
想象一下切换课程所涉及的工作;你必须执行一些字符串操作来首先确定一个类是否已经在元素上,然后相应地做出响应。使用classList
,您只需使用toggle
方法:
document.body.classList.toggle("toggleMe");
某些浏览器目前不支持classList
,但这不会阻止您利用它。您可以download a polyfill将此功能添加到本机不支持的位置。
答案 1 :(得分:1)
getElementsByClassName
方法返回一个nodeList,它是一个类似数组的对象,而不是单个元素。要做你想做的事,你需要迭代列表:
var divs = document.getElementsByClassName("checkField");
if (divs) {
// Run in reverse because we're
// modifying the result as we go:
for (var i=divs.length; i-- >= 0;) {
divs[i].className = 'error';
}
}
另外,只需设置className
实际上替换了类而不是添加它。如果你想添加另一个类,你需要这样做:
divs[i].className += ' error'; // notice the space bar
至于你要做的第二件事,那就是设置标签的类而不是div,你需要遍历div并在它们上面调用getElementsByTagName
:
var divs = document.getElementsByClassName("checkField");
if (divs) {
// Run in reverse because we're
// modifying the result as we go:
for (var i=divs.length; i-- >= 0;) {
var labels = divs[i].getElementsByTagName('label');
if (labels) {
for (var j=0; j<labels.length; j++) {
labels[j].className = 'error';
}
}
}
}
答案 2 :(得分:0)
尝试类似
的内容你想通过document.body
来做到这一点所以试试
var demo =document.body;
// also do this by class like var demo = document.getElementsByClassName("div1one");
// or id var demo = document.getElementsId("div1one");
demo .className = demo .className + " otherclass";
或更简单的解决方案,如果您有jquery作为选项
$("body").addClass("yourClass");
答案 3 :(得分:0)
以下是用于添加和删除类的简单实用程序函数:
function addClass(elem, cls) {
var oldCls = elem.className;
if (oldCls) {
oldCls += " ";
}
elem.className = oldCls + cls;
}
function removeClass(elem, cls) {
var str = " " + elem.className + " ";
elem.className = str.replace(" " + cls + " ", " ").replace(/^\s+|\s+$/g, "");
}