0

私は本当にJavaScriptが初めてで、ページをxhtmlトランジショナルに検証しようとしています。onselectstart="return false" を使用します

だから私はそれをIDとして挿入するJavaScript関数を作成したいと思っていることを理解しています。私はこれさえ見つけましたhttp://www.webmasterworld.com/javascript/3054096.htm そして彼はそれを行う方法を考え出しました。

彼は onload を body に入れ、ID を設定しています。特定の ID 番号を設定せずにクラスでこれを行うことはできますか?

4

3 に答える 3

2

このメソッドを使用することはできますが、document.getElementsByClassNameまだ標準ではありません(HTML5の一部になります) 。IEのどのバージョンでも機能しないことを完全に確信できます。一部の最新のブラウザーはネイティブ実装を提供しますが、そうでない場合は利用可能な場合は、探している特定のクラスのループチェックを実行できます。

私は個人的に、 DustinDiazの実装に触発された次の関数を使用しています。

function getElementsByClassName(node,classname) {
  if (node.getElementsByClassName) { // use native implementation if available
    return node.getElementsByClassName(classname);
  } else {
    return (function getElementsByClass(searchClass,node) {
        if ( node == null )
          node = document;
        var classElements = [],
            els = node.getElementsByTagName("*"),
            elsLen = els.length,
            pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"), i, j;

        for (i = 0, j = 0; i < elsLen; i++) {
          if ( pattern.test(els[i].className) ) {
              classElements[j] = els[i];
              j++;
          }
        }
        return classElements;
    })(classname, node);
  }
}

次に、次のように使用できます。

window.onload = function () {
  var returnFalse = function () { return false; },
      els = getElementsByClassName(document, 'yourClassName'),
      n = els.length;

  while (n--) {
    els[n].onselectstart = returnFalse; 
  }
};
于 2010-01-13T00:58:42.050 に答える
0

編集-この変更された回答は、CMSによって提供された回答に私の以前の回答を組み込んでいます。

このコードはIE6/7/8で機能します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>test page</title>
    <script type="text/javascript" language="javascript">
        window.onload = function() {
            var elements = getElementsByClassName(document, 'noselect');
            for (var i = 0; i < elements.length; i++) {
                elements[i].attachEvent('onselectstart', rfalse);
            }
        }

        function rfalse() { return false; }

        function getElementsByClassName(node, classname) {
            if (node.getElementsByClassName) { // use native implementation if available
                return node.getElementsByClassName(classname);
            } else {
                return (function getElementsByClass(searchClass, node) {
                    if (node == null)
                        node = document;
                    var classElements = [],
                els = node.getElementsByTagName("*"),
                elsLen = els.length,
                pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)"), i, j;

                    for (i = 0, j = 0; i < elsLen; i++) {
                        if (pattern.test(els[i].className)) {
                            classElements[j] = els[i];
                            j++;
                        }
                    }
                    return classElements;
                })(classname, node);
            }
        }
    </script>
</head>
<body>
    <h2 class='noselect'>
        this text cannot be selected
    </h2>
    <h2>
        this text can be selected
    </h2>
    <h2 class='noselect'>
        this text cannot be selected
    </h2>
</body>
</html>
于 2010-01-13T00:58:18.773 に答える
0

上記の解決策はどれも私にはうまくいきませんでした-それはユーザーエラーが原因だったと確信していますが。Jqueryはすでに実行されており、これらはすでにこのために設定されていることがわかります。このコードをヘッドセクションで使用しましたが、うまく機能しています。

<script language="javascript" type="text/javascript">
$(document).ready(function() {
//alert($(".unselectable").length)
var returnFalse = function () { return false; },
els = $(".yourClassNameHere"),
n = els.length;
while (n--) {
els[n].onselectstart = returnFalse;
}
});
</script>
于 2010-01-13T18:44:04.640 に答える