我将如何在香草js中编写这个JQuery addClass方法
How would I write this JQuery addClass method in vanilla js
那我到底该怎么写
$('div').addClass('border1');
在 Vanilla javascript 中,就像我的 add class 方法是什么样子一样。到目前为止,我所拥有的是,
function addClass(x,y) {
x.className += " " + y;
}
但我知道这是错误的,因为参数是关闭的。 我真的迷路了。
让我们仔细看看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');
>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');
});
#x {
width: 50px;
height: 50px;
border: 1px dotted gray;
}
.blue {
background-color: blue;
}
<div id="x"></div>
<button id="y">add the class</button>
<button id="z">toggle the class</button>
如果你的目标是IE10+,你可以使用
var el = document.getElementById("someId");
el.classList.add(className);
对于所有浏览器:
if (el.classList)
el.classList.add(className);
else
el.className += ' ' + className;
源:http://youmightnotneedjquery.com/#add_class
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');
我写这篇文章与其说是一个建议,不如说是因为你似乎想创建一个方法,而不是一个函数;大概是在印象中,一个可能会更好。但是,它们大致相同,只是扩展原型以添加方法可能会导致麻烦。但是,如果您必须:
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
属性(classList.add()
(的字符串连接来代替它们。
- 如何在扩展jQuery方法时传递参数
- 用jQuery方法扩展Zepto.js?scrollTop()
- 如何使用页面's的jQuery方法
- 在 JQUERY 中创建 HTML 后,Jquery 方法不起作用
- 下拉 jquery 方法发布表单不起作用
- jQuery方法未按预期工作-toggleClass
- jQuery 方法调用了两次
- jQuery方法添加一个TextBox
- 在coffeescript中链接jquery方法和参数
- 在jQuery方法中编写自定义属性的正确语法是什么
- 我的jquery方法没有'不起作用
- jQuery方法找不到选择器
- 单击按钮后需要jQuery方法重定向-ASP.NET、VB.NET、jQuery、Javascript
- 如何在jquery方法中创建一个if语句
- 在jQuery方法中实现Javascript变量
- 使用参数作为jQuery方法
- 对从Ajax返回的数据使用Jquery方法,不打印数据
- 如何通过 .ajax() jQuery 方法获取 Carrierwave 上传到 Amazon S3 的图像的 URL
- 如何调用 jQuery 方法
- 插件中的元素不接受 jQuery 方法