6

<html>「no-js」というクラスを要素に配置しました。これは、ユーザーがjavascriptを使用していないことを示します(無効またはブロックされているかどうかに関係なく)。次に、作成したスクリプトファイルで、「no-js」を取り消して「js」を挿入し、ユーザーがクラスを介してjavascriptを使用しているかどうかを判断できるようにします。replace()htmlタグをクエリしてメソッドを使用しようとしましたが、機能しません。これが私が持っているものです:

var html = document.getElementsByTagName("html")[0];
if(html.className == "no-js") {
    html.className.replace("no-js", "js"); // user has JS enabled
} 

Google ChromeまたはFirefoxのバグコンソールにエラーはありませんが、に変更no-jsされることもありませんjs。タグを使用します<noscript>が、マークアップ側をきれいに保つのが好きです。

4

4 に答える 4

8

replace 新しい文字列を返しますが、元の文字列は変更されません。

ステートメントhtml.className = 'js'で唯一のクラス名であることをすでに確認しているので、試してみてください。if

編集:また、<html>タグはすでにとして利用可能ですdocument.documentElement

document.documentElement.className = 'js';

本当に必要なのはそれだけです。ifステートメントも変数も何もありません。

于 2013-02-16T17:15:36.103 に答える
5

受け入れられた答えは確かに正しいですが、この方法は<html>、だけでなく、のすべてのクラスを置き換えます.no-js

この小さなスクリプトは同じことを行いますが、代わりにクラスのみを検索してno-js書き直します。

document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';

ここからスクリプトを取得しました。非常に簡単です。 http://snipplr.com/view/63895/remove-nojs-class-from-html-tag-add-js-class/

于 2015-05-14T15:26:29.647 に答える
1

html.className新しい値にを割り当てるのを忘れました:

var html = document.getElementsByTagName("html")[0];
if(html.className == "no-js") {
    html.className = html.className.replace("no-js", "js"); // user has JS enabled
} 
于 2013-02-16T17:15:06.820 に答える
1

少し正規表現で

(function(html) {
  html.className = html.className.replace(/\bno-js\b/, 'js')
})(document.documentElement);
<!DOCTYPE html>
<html class="no-js">
<head>
	
</body>
</html>

于 2016-12-19T13:33:07.090 に答える