初心者です。
すごく単純なことかもしれませんが、教えて下さい。
document.writeでdiv idの中身を取り出してみました。
それで並び変えてまた表示させたいと思っています。
最初は return を使って関数を呼び出してみましたが、受け取れず・・・
なんか難しいので、とりあえず以下のプログラムで画面に表示さえすれば
あとはインフレームなどで対応しようかと思いました。
しかし、出力結果が一行しか表示されません。
アラートで出力すると、順番に表示されるのですか。
どなたか宜しくお願いします。
<script type="text/javascript">
function yomikomi(){
var selectObj = new Array();
var parents = new Array();
//配列を読み込む
parents=Item();
//日付順にする
alert(parents);
parents.sort();
alert(parents);
//return parents;
for(i=0; i < parents.length; i++){
//ID_ だけ削除する。
if(parents[i]=='ID_'){
delete parents[i];
parents.splice([i],1);
}
selectObj[i] = document.getElementById(parents[i]);
//小窓で確認
alert(selectObj[i].innerHTML);
//★問題の箇所 画面には1行しか表示されない。
document.write(selectObj[i].innerHTML);
}
}
</script>
<script type="text/javascript">
function Item(){
var parents = Array(
'ID_'
,'201008012'
,'201007161'
);
return parents;
}
</script>
No.5ベストアンサー
- 回答日時:
やりたいことは、divのidに日付が入っており、
そのid情報を元にdivをソートし再出力したい
でよろしいですか?
<html>
<head>
<script type="text/javascript">
function yomikomi(){
var div = document.getElementsByTagName("div");
var list = document.getElementById("list");
var kids = [];
for(var i=0; i<div.length; i+=1){
if(div[i].id && div[i].id.match(/\d+/)){
kids.push(div[i]);
}
}
kids.sort(function(n, m) {
if (n.id === m.id) return 0;
return (n.id < m.id) ? -1 : 1;
});
for(var i=0; i<kids.length; i+=1){
list.appendChild(kids[i]);
}
}
</script>
</head>
<body onload="yomikomi();">
<div id="list">
<div id="201008012">ID201008012</div>
<div id="201007161">ID201007161</div>
<div id="201008013">ID201008013</div>
<div id="201008015">ID201008015</div>
<div id="201006015">ID201006019</div>
</div>
</body>
</html>
No.6
- 回答日時:
#2です。
>undefined」という文字だけ連続して表示されています。
失礼しました。演算子の優先順位をミスったみたい。
if(e = document.getElementById(parents[i]) && parents[i] != 'ID_')
↓
if((e = document.getElementById(parents[i])) && parents[i] != 'ID_')
にすれば、動作すると思います。
(No4様:フォローありがとうございます。)
でも、やりたいことに関しては、どうやらNo5様の推理があたっているみたいなので、最初にidの配列を定義しておくよりも、No5様のようにドキュメントから該当する要素を拾い出すようにしておいたほうがなにかと便利なはずと思われます。
ということで、もし利用なさるならそちらをどうぞ。
No.4
- 回答日時:
No.2さんのだと、eにtrue/falseが入っている。
素直に
for(i=0; i<parents.length; i++) {
if(document.getElementById(parents[i]) && parents[i] != 'ID_')
html += document.getElementById(parents[i]).innerHTML + "<br>";
}
でうまくいく。
※HTML文法の間違いは、ブラウザーが何とかしてくれる。
No.3
- 回答日時:
HTML()のエレメントのid属性は、数字で始められません。
HTML4.01で仕様確認
http://www.w3.org/TR/1999/REC-html401-19991224/t …
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
No.2
- 回答日時:
HTMLが不明なので、想像するしかないのだけれど…
(スクリプトの目的もよくわかりませんけれど)
document.writeを使っていることから、body内にスクリプトがあるのだと思いますが、document.getElementById(parents[i])で取得しようとしている要素のDOMは生成された後でしょうか?(生成されていないと取得できずエラーになる)
あるいは、ロード後にスクリプトが実行されているのなら、document.writeで新たな文書が作成されるので現在のDOMが参照できなくなっているとか…
>//★問題の箇所 画面には1行しか表示されない。
「1行」の意味が不明ですが、配列は全て書き出されるが1行になってしまうと言う意味なのか、配列要素が1個分しか表示されないという意味なのか…
前者ならば、出力したHTMLに改行がないから。
もっとも、HTMLで改行しても表示には反映されないので、<br>や<p>要素を記述してあげる必要があります。
後者であれば↑のエラーで処理が止まっている可能性が考えられます。
また、配列を削除するにはspliceだけでよいですが、i=0から増加順に行なうとミスが起こる可能性があります。
(例の場合だと「ID_」が最後になるので、問題はありませんが…)
i = parents.length-1から減少順に処理するか、または、増順におこなうなら削除せずに処理をスキップするだけにするかにしたほうがよさそう。
さらには
>selectObj[i] = document.getElementById(parents[i]);
で定義した内容に対して
>document.write(selectObj[i].innerHTML);
を出力しようとしても、selectObj[i].innerHTMLの値は未定義のはず。
内容がよくわかってませんけれど、以下みたいにしたらどうなりますか?
<script type="text/javascript">
<!--
window.onload = yomikomi;
function yomikomi(){
var parents = ['ID_', '201008012', '201007161'];
var e, html = "";
//日付順にする
parents.sort();
//html作成
for(i=0; i<parents.length; i++) {
if(e = document.getElementById(parents[i]) && parents[i] != 'ID_') html += e.innerHTML + "<br>";
}
//★表示
document.write(html);
}
//-->
</script>
* ところで、idって数字から始まってもよかったんだっけ?
この回答への補足
早速のご返答ありがとうございます。
HTMLについては下の回答への補足で付け足しました。
スクリプトの目的とは・・・
これはIDに日付を付けて、perlでファイル出力したものを並び替えしたい事です。
一応複数表示できましたが、「undefined」という文字だけ連続して表示されています。
これをIDの中身にするにはどうのようにすれば良いのでしょうか?
大変恐縮なんですがもしも宜しければ教えて下さい。
javascriptは難しい。。。
No.1
- 回答日時:
document.writeが実行された時点で
HTML文書が書き換えられてしまっているので、
2回目以降の関数が実行されていない(関数自体が消えてしまった)
んだと思いますけど。
スクリプトが置いてある場所と、
HTMLがどうなっているのか(現象を再現可能な文書を)書き添えたら、
誰か親切な人が直してくれますので、
この回答の補足欄使ってください。
この回答への補足
ありがとうございます。
そうですね、私の説明不足です。
//▼追記したもの
<body onload="yomikomi()";>
<script type="text/javascript">
function yomikomi(){
var selectObj = new Array();
var parents = new Array();
//配列を読み込む
parents=Item();
//日付順にする
alert(parents);
parents.sort();
alert(parents);
//return parents;
for(i=0; i < parents.length; i++){
//ID_ だけ削除する。
if(parents[i]=='ID_'){
delete parents[i];
parents.splice([i],1);
}
selectObj[i] = document.getElementById(parents[i]);
//小窓で確認
alert(selectObj[i].innerHTML);
//★問題の箇所 画面には1行しか表示されない。
document.write(selectObj[i].innerHTML);
}
}
</script>
<script type="text/javascript">
function Item(){
var parents = Array(
'ID_'
,'201008012'
,'201007161'
);
return parents;
}
</script>
//▼追記したもの
<div id="201008012">
ID
</div>
<div id="201007161">
ID
</div>
</body>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
クリックで色変更後に既に変更...
-
removeEventListenerについて
-
テキストエリア内の一部の文字...
-
createElementが一瞬で消えてし...
-
指定したパスが現URLに含まれて...
-
iframe内のリンクが飛ばないの...
-
innerHTMLの初期値
-
背景色を透明化
-
console.log結果をhtmlで表示し...
-
IFRAMEの表示/非表示を切り替え...
-
JSで動的にリンクを作成
-
jQueryでクリックされた要素のi...
-
javascriptでオブジェクトの重...
-
読み込んだQRコードをフォーム...
-
createElementで作成した要素を...
-
classの中の<a>タグにidを追加
-
変数内容をHTML内で表示する方法
-
[急ぎ] videoタグで埋め込んだm...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
HTMLタグに複数のクラスを設定...
-
変数名をどのようにつけるのが...
-
401エラードキュメントを401.ht...
-
javascriptテキストBOX色を元に...
-
読み込んだQRコードをフォーム...
-
タブで開いてさらにタブ内をア...
-
createElementで作成した要素を...
-
removeEventListenerについて
-
表示・非表示のスクリプトで、...
-
HTMLとJavaScriptで作ったタイ...
-
HTMLとJavaScriptで作ったタイ...
-
getElementByIdの戻り値がnull...
-
指定したパスが現URLに含まれて...
-
[急ぎ] videoタグで埋め込んだm...
-
IFRAMEの表示/非表示を切り替え...
-
iframe内のリンクが飛ばないの...
-
removeAttribute()メソッドで削...
-
背景色を透明化
-
jQueryで同じid属性が複数あっ...
おすすめ情報