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

私はそれが戻るtruefalse、または戻ることを期待しますが、私が得るのは

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

UPD:みんなありがとう。今、私はそれを取得します。メソッドを文字列ではなくオブジェクトまたは要素(もっと正しいのは何ですか?)に設定する必要があります!

4

3 に答える 3

4

document.getElementById('link') doesn't return a String, it returns a DOM element. You could try this instead:-

 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

これを行う方法は、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 に答える
1

私の知る限り、hasClassは のメソッドではありませんElement。jQuery メソッドを考えている可能性が高いため、jQuery を使用し、jQuery セレクターを使用して要素を選択する必要があります。他のフレームワークにもそのようなメソッドがあるかもしれませんが、YUI も同様だと思います。

于 2012-09-27T10:03:10.810 に答える