元スレ+ JavaScript の質問用スレッド vol.93 +
JavaScript覧 / PC版 /みんなの評価 :
51 = :
<div>
<span><b>1</b></span>
<span><b>2</b></span>
<span><b>3</b></span>
</div>
htmlの中にこういう構造のタグがあるとします
spanに挟まっているbタグを全てobjに格納したいのですが
var obj = document.getElementsByTagName('span').getElementsByTagName('b');
alert(obj.length); // 3って表示して欲しいのにエラーになります
求めたいことは仮にhtmlが上のだけだとして
var obj = document.getElementsByTagName('b');
alert(obj);// 3
の結果です
htmlはいじれません
どのようにしてオブジェクトをとることができますか?
53 = :
querySelectorAllでも使えば
54 = :
>>51
<div>
<span><b>hoge</b></span>
<span><b>fuga</b></span>
<span><b>piyo</b></span>
</div>
<script>
window.onload = function() {
var obj = document.getElementsByTagName('span')[0].getElementsByTagName('b');
alert(obj.length); // 1
alert(obj[0].innerHTML); // hoge
var obj2 = document.querySelectorAll('span > b');
alert(obj2.length); // 3
alert(obj2[0].innerHTML); // hoge
alert(obj2[1].innerHTML); // fuga
alert(obj2[2].innerHTML); // piyo
};
</script>
55 = :
>>51
forループ使ってb要素を集めるとか
56 = :
>>51
オレも考えたぜ
<body>
<div>
<span><b>1</b></span>
<span><b>2</b></span>
<span><b>3</b></span>
<span><b>4</b></span>
</div>
<script type="text/javascript">
var obj=document.getElementsByTagName('span'),t=0;
for(var i=0;i<obj.length;i++){
for(var s=0;s<obj.length;s++){
if(obj[i].childNodes[s]){t++;}
}
}
alert("<b>タブの数="+t);//t=4となる
</script>
</body>
しかし、何でかalert(obj.childNodes.length);でエラーなんだよな
何でなんだ?
57 = :
>>56
getElementsByTagNameで返されるのはNodeListだから。
childNodesはNodeに属するプロパティ。
childNodesはNodeListとして構成される。
なのでobj.lengthは通る。
こういった場合の解決方法は>>53-54で使われているquerySelectorAllか
document.evaluateを使ったXPathを使った方法かになるんじゃないかな。
どのバージョンまでサポートされてるかは忘れたけど、
document.evaluateはIEでの対応が微妙だったはず。
58 = :
>>57
なんかオレの知らない方法だな、イジッテたら分かったが、
obj[0].childNodes.lengthで1個目のspanの子ノードの数が取得
できるって分かったから、obj[i].childNodes.lengthで
iを0からobj.lengthの値までforで回すと子ノード<b>タブの数
が計算できるな、二重にforを使う必要がなかったな。
<body>
<div>
<span><b>1</b><b>1</b</span>
<span><b>2</b></span>
<span><b>3</b></span>
<span><b>4</b></span>
</div>
<script type="text/javascript">
var obj=document.getElementsByTagName('span'),t=0;
for(var i=0;i<obj.length;i++){
t=t+obj[i].childNodes.length;
}
alert("<b>タブの数="+t);//t=5と出る
</script>
</body>
59 = :
こんな偉そうな初心者も珍しいで
60 = :
>>58
それはspanの中にb以外が入った時に間違った結果になるでしょ
61 = :
っていうか、>>51が欲しいのはbタグの数じゃなくて、bタグの要素のリストだぞ。
3って表示して欲しいのに とは書いてあるが。
63 = :
いいえ
64 = :
>>63
Ajaxで書き換えた後の中にある
<a href="javascript:document.form.submit()">
の部分をクリックすると
document.form.submit is not a function
と出てきます。
フォームの中にsubmitの単語が他に含まれていた場合もこうなるみたいですが今回はそのエラーではありません。
ちなみにAjaxの書き換えに使用するphpファイルは
直接開いてみたところエラーが出ずにちゃんと飛んだのでAjaxに使用した場合うまく動作しません。
65 = :
javascriptスキーマとかどこの原始人だよ
67 = :
アコーディオンメニューをjQueryのslideDownとslideUpを使って
作成したのですが、slideDownで下がりslideUpで上がるアニメーション
のときにアコーディオンメニューとアコーディオンメニューの下に書いた
文字がブレるような挙動をするのですが、仕様なんですか?
68 = :
jQueryの記述に変えたところなんとかできました。
>>65
ダメなの?w
70 = :
>>64
IEだとDOMで動的に生成した要素にonclick=javascript:~などは使えないです。
71 = :
>>70
いやいや、onclick="javascript:*" は全然意味が違うでしょう
ラベルじゃないですか
72 = :
>>71
a href=~でも同じだったとおもう。
回避策はあったけど今すぐは思い出せない。
73 = :
>>72
IE8 で再現できません
http://jsfiddle.net/u8ygk/
setAttribute のバグを混同して記憶しているのでは?
http://www.tagindex.com/kakolog/q4bbs/2201/2582.html
74 = :
回避策ですが・・・
送信するform要素に id="form"、追加されるa要素に id="formLink"
を設定しているとして、以下のコード書いたらいけるとおもうよ。
var fromSubmit = function(){
document.getElementById( 'form' ).submit();
}
var formSubmitLink = document.getElementById( 'formLink' );
formSubmitLink.onclick = fromSubmit;
>>73
はまったのは、IE6-7だったかも。
75 = :
>>74
情報を小出しにしないでください
setAttribute のバグなら IE8 で解消されたことは理解してますし、>>73は IE6-7 でも動作するように書いています(環境がないので試してませんが)
http://fiddle.jshell.net/vSqKr/26/show/#Q13
あなたの環境では動作しないのでしょうか?
onclickにjavascriptラベルを適用する意味は全くありません
私の知る限りでは、element.onclick なり attachEvent なりを使えば IE6-7 でも適用できるはずです
76 = :
>>75
すみませんね、引っ込みますよ。
77 = :
> >>73は IE6-7 でも動作するように書いています(環境がないので試してませんが)
失礼。コンソールが使えないのでアドオンなしの IE6-7 ではエラーになりますね。
alert() に変更しました。
http://jsfiddle.net/u8ygk/1/
78 = :
別に引っ込まなくてもよかったんじゃないの
IEで動作するか確かめるだけだし
80 = :
var a = document.createElement('a');
a.setAttribute('onclick', 'javascript:alert(true)'); // 結局、こういうことだったの?
84 = :
>>82,83
ありがとうございます。
なるほど、チェックボックスかくして、自作したほうが簡単そうですね(^^
85 = :
Twitterのページを開きっぱなしにすると新しいツイートを自動で確認してくれますが
あれはどうやってるのですか?
確認するたびにJSONPでscriptタグを作ってるのですか?
86 = :
>>85
setIntervalとかじゃね?
87 = :
>>85
定期的にhttp://api.twitter.com/1/statuses/home_timeline.json をXHRで読み込んでいる
88 = :
>>86-87
ありがとうございます
98 = :
jqueryは $(セレクタ.操作1().操作2()… って書けるのが醍醐味だからね。
選択できなかったからってnullなどを返すのはまずいわけだな。
0個の選択という状態にしておいて、操作の所ではなにもしないって感じになっている。
.isEmpty()ぐらいあっても良かったかもしれんが…
$.fn.isEmpty = function() {
return this.length <= 0;
};
拡張するならこうか。
100 = :
本職、趣味、学生問わず
IDE or エディタって何を使ってます?
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.93 + (1001) - [100%] - 2012/1/1 4:46
- + JavaScript の質問用スレッド vol.97 + (1001) - [97%] - 2012/3/1 3:31
- + JavaScript の質問用スレッド vol.96 + (1001) - [97%] - 2012/1/28 23:01
- + JavaScript の質問用スレッド vol.90 + (1001) - [97%] - 2011/10/26 4:18
- + JavaScript の質問用スレッド vol.90 + (1001) - [97%] - 2011/11/15 20:32
- + JavaScript の質問用スレッド vol.99 + (1001) - [97%] - 2012/5/7 4:32
- + JavaScript の質問用スレッド vol.98 + (1001) - [97%] - 2012/4/9 14:46
- + JavaScript の質問用スレッド vol.83 + (1001) - [97%] - 2011/2/24 8:02
- + JavaScript の質問用スレッド vol.94 + (1001) - [97%] - 2012/1/8 15:46
- + JavaScript の質問用スレッド vol.95 + (1001) - [97%] - 2012/1/17 4:16
- + JavaScript の質問用スレッド vol.113 + (1001) - [95%] - 2014/1/25 12:46
- + JavaScript の質問用スレッド vol.131 + (1000) - [95%] - 2017/1/25 8:01
- + JavaScript の質問用スレッド vol.130 + (1001) - [95%] - 2017/11/25 20:45
- + JavaScript の質問用スレッド vol.131 + (1004) - [95%] - 2018/3/7 13:30
- + JavaScript の質問用スレッド vol.132 + (1001) - [95%] - 2018/4/19 11:00
- + JavaScript の質問用スレッド vol.113 + (1001) - [95%] - 2014/3/15 21:30
- + JavaScript の質問用スレッド vol.133 + (1001) - [95%] - 2018/6/8 10:45
トップメニューへ / →のくす牧場書庫について