1

这段代码有什么问题?

(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'));    
})();

我希望它会返回trueor false,但我得到的只是

TypeError: document.getElementById("link").hasClass is not a function**

UPD:谢谢大家。现在我懂了。我应该将方法设置为对象或元素(更正确的是什么?)而不是字符串!

4

3 回答 3

4

document.getElementById('link') 不返回字符串,而是返回 DOM 元素。你可以试试这个: -

 Element.prototype.hasClass = function (className) {
       return this.className.search('(\\s|^)' + className + '(\\s|$)') != -1 ? true : false;
   };

   console.log(document.getElementById('link').hasClass('test'));   
于 2012-09-27T10:15:36.887 回答
1

据我所知,hasClassis not a method of Element,您可能会想到 jQuery 方法,因此您必须使用 jQuery 并使用 jQuery 选择器选择元素。其他框架也可能有这样的方法,我相信 YUI 也有。

于 2012-09-27T10:03:10.810 回答
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 元素(实现这一点的方法有很多),但这是正确的方法。

于 2012-09-27T10:48:37.093 回答