这段代码出了什么问题?
(function (){
'use strict';
// add hasClass function
String.prototype.hasClass = function (className) {
return this.className.search('(\\s|^)' + className + '(\\s|$)') != -1 ? true : false;
};
console.log(document.getElementById('link').hasClass('test'));
})();
我希望它会返回true
或false
,但我得到的只是
TypeError: document.getElementById("link").hasClass is not a function**
UPD:谢谢你们。现在我懂了。我应该将方法设置为Object或Element(更正确的是什么?)而不是String!
答案 0 :(得分:4)
document.getElementById('link')不返回String,它返回一个DOM元素。您可以尝试这样做: -
Element.prototype.hasClass = function (className) {
return this.className.search('(\\s|^)' + className + '(\\s|$)') != -1 ? true : false;
};
console.log(document.getElementById('link').hasClass('test'));
答案 1 :(得分:1)
据我所知,hasClass
不是Element
的方法,你可能会想到jQuery方法,因此你必须使用jQuery并使用jQuery选择元素选择。其他框架也可能有这样的方法,我相信YUI也是如此。
答案 2 :(得分:1)
执行此操作的方法是编写一个接收DOM元素的函数,因为String对象与它无关;)
一个简单的例子:
function hasClass(element, classcheck){
return element.className.indexOf(classcheck) !== -1;
}
所以你的代码看起来像是:
(function (){
'use strict';
// add hasClass function
function hasClass(element, classcheck){
return element && element.className && element.className.indexOf(classcheck) !== -1;
}
console.log(hasClass(document.body,'test'));
})();
显然,你应该检查第一个参数实际上是一个DOM元素(实现它的方法很多),但这是正确的方法。