JavaScriptについての質問です。
特定の条件で特定のcssファイルを読み込ませたいのですが、どんな風に記述すればよいでしょうか?
具体的には、htmlのkeywordsタグに設定したキーワードのうち、特定のキーワードがあった時に特定のcssを読み込ませたいです。
たとえば、あるふたつのページのキーワードがそれぞれ下記のとき、
①<meta name="keywords" content="kore,sore" />
②<meta name="keywords" content="sore,are" />
外部css
<link rel="stylesheet" href="/kono.css" />
キーワードに「kore」があるときだけ「kono.css」を読み込むよう<link rel="stylesheet" href="/kono.css" />をhead内に書き加えるようにしたいです。
なので、①の場合は読み込まれ、②の場合は読み込まれないという要領です。
html、cssは多少分かりますが、JavaScriptの知識が乏しいのでこんなことができるのかどうかも分かりませんが、詳しい方にご教示いただければ幸いです。
平行していろいろ調べ下記のような感じで書いてみました。
var metaDiscre = document.head.children;// ヘッダのメタ情報
var metaLength = metaDiscre.length; // メタ情報の配列数を取得
for(var i = 0;i < metaLength;i++){ // 繰り返し処理
var proper = metaDiscre[i].getAttribute('name'); // メタ情報のneme属性を取得
if(proper === 'keywords'){ // neme属性がkeywordsだったとき
var dis = metaDiscre[i].getAttribute('content'); // keywords属性のcontent内容を取得
if (dis.indexOf('kore') !== -1) { // content内容にkoreが含まれるとき
// kono.cssをヘッダに書き出す
var d = document;
var link = d.createElement('link');
link.href = '/kono.css';
link.rel = 'stylesheet';
link.type = 'text/css';
var h = d.getElementsByTagName('head')[0];
h.appendChild(link);
}
}
}
jsファイルとして保存し、htmlのbody直下にscriptタグでファイル読み込ませましたが指定文字を含むページでも「kono.css」のlinkタグが書き出されずうまく動きません。
やりたいことは伝わるかと思いますが、具体的にどこが間違っているかご教示くださいませ。
素人なので文法の違いやセミコロン等の文字不足など、初歩的な部分も含めて検証していただけると嬉しいです。
No.4ベストアンサー
- 回答日時:
こんにちは
内容は同じですが、多少旧め(?)のブラウザでも動く感じに焼き直してみました。
<!DOCTYPE HTML>
<html lang="ja">
<head><title>Sample</title>
<meta name="keywords" content="kore,sore" />
<meta name="keywords" content="sore,are" />
<script type="text/javascript">
{
let meta, m, i, f = false;
meta = document.querySelectorAll('head meta[name="keywords"');
for(i=0; m=meta[i++];){ if(/kore/.test(m.content)) f = true; };
if(f){
let html = '<link rel="stylesheet" href="/kono.css" type="text/css" />';
document.querySelector('head').insertAdjacentHTML('beforeend', html);
}
}
</script>
</head>
<body>
<p>テスト用文章</p>
</body>
</html>
※ 言葉使いの問題かもしれませんが・・・
>スクリプトが動いてもhtmlのソース自体が書き換わるわけではない
>ということでしょうか?
ソース(=htmlファイルの内容)が変わることはありません。
(ブラウザの「ソースを表示」で表示しても何も変わりません)
読み込み後に、ブラウザが解釈し、表示用に保持している内容(DOM)を書き換えています。
あ、あなたが神か…(´;ω;`)ブワッ
いただいた修正版のコードで見事に動きました!!
感謝の言葉しかありません。
まったく知識のない私には呪文のようにしか見えず、なにがどう変わったのか分かりませんが、とにかく目的を達成することができて感激です。
お忙しいなかお時間割いていただき誠にありがとうございます。
No.3
- 回答日時:
火狐と、ちょろめのローカル環境で動かしました。
追加されました。単純に link.href = '/kono.css'; のパスがおかしいだけ?
let head = document.querySelectorAll ('head meta[name="keywords"]');
let target = [...head].filter (h => /kore/.test (h.content));
if (target.length) {
let link = document.createElement ('link');
{ href: 'kono.css', rel: 'stylesheet', type: 'text/css'}.entries (([a, b]) => link[a] = b);
document.head.appendChild (link);
}
早速の検証ありがとうございます。
試してみましたがlinkタグが書きこまれません。(´;д;`)
JavaScriptはまったく知識がないので、そもそもやり方が間違っているかもしれませんが、下記のようなページをつくればlinkタグが書き加えられるということでしょうか?
これをブラウザで開いてソースを見てもlinkタグは書き加えられていませんでした。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="keywords" content="kore" />
<link rel="stylesheet" href="/css/kizon.css" type="text/css" media="all" />
<title>Document</title>
</head>
<body>
</body>
<script type="text/javascript">
let head = document.querySelectorAll('head meta[name="keywords"]');
let target = [...head].filter(h => /kore/.test(h.content));
if (target.length) {
let link = document.createElement('link'); {
href: 'kono.css',
rel: 'stylesheet',
type: 'text/css'
}.entries(([a, b]) => link[a] = b);
document.head.appendChild(link);
}
</script>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- HTML・CSS cssが効かなくて困ってます 1 2023/01/01 23:57
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- HTML・CSS CSSが上手く反映されないみたいです 2 2022/11/21 16:19
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホームページ内検索をフォーム...
-
iframeの部分だけリロード
-
海外の時間をホームページ上に表示
-
【javascript】 IMEのカタカナ...
-
カンマ区切り形式ではなく、セ...
-
キングファイルの背表紙を作成...
-
PDFに変換した時リンクを維持す...
-
パワーポイントで参照ページを...
-
各ページの1番上の表示について
-
vbaで実行後、指定のセルに戻す...
-
文字を一括で置換するソフト・...
-
Wordで一括して改ページする方法
-
中国のEV
-
Dreamweaverでテンプレートを再...
-
ネット上で自作自演を見破る方法
-
VBAでマルチページのページ指定...
-
隠しページ
-
エクセルでアルファベット5段階...
-
怖いキティちゃんの画像
-
UserForm.showでマルチページ1...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ホームページ内検索をフォーム...
-
JavaScriptがoffだったらどっか...
-
チェックボタンをクリックする...
-
pythonにおける単方向リストの...
-
簡易版パスワード入力画面について
-
iframeの部分だけリロード
-
海外の時間をホームページ上に表示
-
確認ダイアログを表示出来ない
-
画像の上にマウスが乗ったら別...
-
md5.jsとbase64.jsがスクリプト...
-
【JavaScript】特定の条件で特...
-
javascriptとcookieの判定とペ...
-
ロールオーバーとスワップイメ...
-
ホームページでDOSコマンド練習...
-
getElementsByTagNameが使えない
-
JAVAスクリプトの関連書について…
-
親ページでリンククリックした...
-
とある英数字群を""で囲みたい
-
パワーポイントで参照ページを...
-
キングファイルの背表紙を作成...
おすすめ情報
いろいろ調べながら試しているのですが、スクリプトが動いてもhtmlのソース自体が書き換わるわけではないということでしょうか?
簡単にhtmlとcssを作って実験してみましたが、コンソールで見ると
{ href: 'kono.css', rel: 'stylesheet', type: 'text/css'}.entries (([a, b]) => link[a] = b);
上記の行で「Uncaught SyntaxError: Unexpected token :」と出ており、スクリプトで読み込ませるcssは効いてない状態です。
なにか試してみることはあるでしょうか?
急ぎませんので、お手すきの際に検証していただければ幸いです。