那我怎么写
$('div').addClass('border1');
在Vanilla javascript中,就像我的add class方法一样。到目前为止我所拥有的是,
function addClass(x,y) {
x.className += " " + y;
}
但我知道这是错误的,因为参数已关闭。我真的输了。
答案 0 :(得分:5)
让我们仔细看看jQuery在这里做了什么。
$('div')
的含义是什么?
在jQuery术语中,它意味着"选择所有' div'文件中的元素"
$('div')
是一个jQuery对象,它表示文档中的所有div
元素。但是在这段代码中你没有自己专门针对单个DOM元素。
让我们编写自己的简化选择对象" MySelect":
/**
* `MySelect` object constructor.
*/
function MySelect(selector){
this.elementList = document.querySelectorAll(selector);
}
现在让我们使用它:
var divs = new MySelect('div');
divs.elementList; // all `div` elements in the document.
(注意querySelectorAll
是一种原生的javascript DOM方法)
现在我们有了一个元素选择对象,让我们为它添加一个addClass
方法:
/**
* Add the specified class to all elements selected by this object.
*/
MySelect.prototype.addClass = function(cls){
var i, e;
for (i = 0; i < this.elementList.length ; i++){
e = this.elementList[i];
e.className += " " + cls;
// can also use e.classList.add
}
}
瞧:
divs.addClass('xyz');
这是一种非常简化的方式,就是jQuery的工作原理。
您可以执行$
语法:
function $(selector){
return new MySelect(selector);
}
像往常一样使用它:
$('div').addClass('xyz');
答案 1 :(得分:3)
element.classList
是vanillaJS的做法
var x = document.getElementById('x');
var y = document.getElementById('y');
var z = document.getElementById('z');
y.addEventListener('click',function(){
x.classList.add('blue');
});
z.addEventListener('click',function(){
x.classList.toggle('blue');
});
&#13;
#x {
width: 50px;
height: 50px;
border: 1px dotted gray;
}
.blue {
background-color: blue;
}
&#13;
<div id="x"></div>
<button id="y">add the class</button>
<button id="z">toggle the class</button>
&#13;
答案 2 :(得分:1)
如果您正在重新定位IE10 +,则可以使用
var el = document.getElementById("someId");
el.classList.add(className);
适用于所有浏览器:
if (el.classList)
el.classList.add(className);
else
el.className += ' ' + className;
答案 3 :(得分:0)
function addClass(selector, class) {
els = document.querySelectorAll(selector);
for (var i = 0; i < els.length; i++) {
els[i].className += class;
}
}
然后你可以这样做:
addClass('div', 'border1');
addClass('#someID', 'someclass');
addClass('.someClass', 'someotherclass');
答案 4 :(得分:0)
我写这不是推荐,而是因为你似乎想要创建一个方法,而不是一个函数;可能是因为人们可能会更好。然而,它们大致相同,除了扩展原型以添加方法可能会带来麻烦。但是,如果你必须:
NodeList.prototype.addClass = function (cName) {
// creates an Array from the NodeList, and iterates through:
return [].forEach.call(this, function (elem) {
// adds the passed-in class-name:
elem.classList.add(cName);
});
};
以上可以通过以下方式调用:
document.querySelectorAll('div').addClass('newClassName');
或者:
document.getElementsByTagName('div').addClass('newClassName');
请注意,这会使用相对现代浏览器中的功能,但可以使用for
循环(forEach
)和带className
属性的字符串连接({{1} })如果需要的话。