
ページごとにディレクトリ名を判別して表示内容を変更するスクリプトを書きたいのですが、現状ieでのみ動作が不安定です。yuga.jsに組み込む形で記述しています。
//script------------------------
var filePath = location.href;
var a = filePath.split('://');
schema = a[0];
var d = a[1].split('/');
host = d.shift();
var f = d.pop();
var dirs = d;
if(dirs == 'hoge'){
var target = '<li><a href="..\/hoge\/index.html">hoge1<\/a><\/li>' +
'<li><a href="..\/hoge\/hoge2.html">hoge2<\/a><\/li>' +
'<li><a href="..\/hoge\/hoge3.html">hoge3<\/a><\/li>'
}
document.getElementById('listWrap').lastChild.innerHTML(target);
//html-----------------------------
<div id="listWrap">
<img src="./images/listTitle.jpg" alt="" width="**" height="**" />
<ul id="list"></ul>
</div>
上記スクリプトを外部から読み込んでonloadで実行していますが、ieでは
document.getElementById('listWrap')がnullを返すことが多く、表示される場合とされない場合があります。
ご教授よろしくお願いします。
No.4ベストアンサー
- 回答日時:
細かいミスは置いといて、、
>>document.getElementById('listWrap')がnullを返すことが多く
Scriptを直接先頭に書き、その後にhtmlを書いていませんか?
下記例3つの違いは認識していらっしゃるでしょうか?
1.
---↓これは「null」と表示されます
<html>
<script>
alert(document.getElementById("listWrap"));
</script>
<body>
<div id="listWrap"></div>
</body>
</html>
---
2.
---↓これは「object」と表示されます
<html>
<body>
<div id="listWrap"></div>
</body>
<script>
alert(document.getElementById("listWrap"));
</script>
</html>
---
3.
---↓これも「object」と表示されます
<script>
function test(){
alert(document.getElementById("listWrap"));
}
</script>
<html>
<body onload="test()">
<div id="listWrap"></div>
</body>
</html>
---
基本的には、HTML文書は上から順に読み込まれます。
1.の場合、HTMLを上から読んでいくとid="listWrap"のタグは
まだ読み込まれていませんので「null」となります。
2.の場合はHTMLが先に読み込まれるのでid="listWrap"は有効となります。
3.の場合はbodyタグのonloadイベントで呼んでいます。
onloadイベントはすべて読み込まれた次点で開始となるので
これも有効となります。
読み込みの制御はソフトの作りによるので当然ブラウザ毎に異なります。
ページ表示時に何かJavaScriptで処理を行う場合
3.のfunctionとしてonloadに書くのが一般的です。
No.3
- 回答日時:
if(d.length ==1){dirs = d;}
else{dirs = d[0];}
------------------------------
これもまだ変です。あくまで、
dirs = d; は、配列
dirs = d[0]は、文字列
です。
下記の場合を参考にしてください。
[例]
1. var filePath = 'http://okwave.jp/qa3962294.html'; のとき
d[0]==undefined
d[1]==undefined
2. var filePath = 'http://okwave.jp/root/qa3962294.html'; のとき
d[0]==root
d[1]==undefined
3. var filePath = 'http://okwave.jp/root/sub/qa3962294.html'; のとき
d[0]==root
d[1]==sub
ご指摘ありがとうございます。
お礼が遅くなり申し訳ありません。
trueになることがなかったので、該当箇所の間違いを見落としていました。
No.2
- 回答日時:
[追記]
・ もう一つ気になることがありました。
dirsは、配列ですね。
??? if(dirs == 'hoge')
質問の意図が明確でなくて申し訳ありません。
if(d.length ==1){dirs = d;}
else{dirs = d[0];}
var target = "上記の内容";
$("#list").html(target);//jqueryをつかっていました。
これで、ie6,7だとレンダリングされないことが多く、getElementByIdで得たノードがnullになっていることがわかったので、どうしたらよいでしょうかというのが質問内容です。
No.1
- 回答日時:
・ innerHTMLの書き方が間違っているようです。
document.getElementById('listWrap').lastChild.innerHTML = target;
または
document.getElementById('list').innerHTML = target;
早速ご回答いただきありがとうございます。
記述ミスでした。ご指摘ありがとうございます。
上記箇所のdocument.getElementById('list')で、ieの場合nullが返されることが多いため、こまっています。
DOMツリーの読み込みが完了していればnullにならないと思っていたのですが。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ActiveXobjectが作成できない
-
<a>タグのテキストを取得
-
HTML:Tableタグに対し、JavaScr...
-
画像上のクリックした場所が分...
-
javascriptでスロットゲームを...
-
配列の大括弧と丸括弧はどう違う?
-
Boolean型配列中のTrueの有無を...
-
functionから別のfunctionを実...
-
JavaScriptとHTMLの課題です
-
javascriptで複数キーワード検...
-
idを使わずにonclickで自身の要...
-
JavaScriptで日付を取得したいです
-
VBAでIEのボタンを押してメッセ...
-
C#OpenCv V4にのエラーに関する...
-
マウスでポイントすると説明を表示
-
jQueryの :not() .not() が有効...
-
【javascript】正規表現で括弧...
-
JavaScriptにおける[] とか :...
-
ジェネレーターの作り方
-
Linux バイナリ実行できない "...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ActiveXobjectが作成できない
-
onchangeイベントを使ってspan...
-
innerHTML実行後のイベント
-
重複しないくじの作り方がわか...
-
javascript の 命令文の記述で...
-
<a>タグのテキストを取得
-
javascriptで自動計算フォーム...
-
マウスストーカーやクリックで...
-
任意の座標をクリックさせるには
-
javascriptの質問です
-
配列の大括弧と丸括弧はどう違う?
-
appendChildがieだとできない??
-
HTML:Tableタグに対し、JavaScr...
-
[初心者]javascriptのfor文でな...
-
javascriptを使ったページ内の...
-
「nullまたはオブジェクトでは...
-
JavaScriptによるundefined判定...
-
javascriptで編集可能不可能の...
-
【Tabキー】特定の範囲内だけで...
-
getElementsByClassについて
おすすめ情報