のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,898人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレ+ JavaScript の質問用スレッド vol.93 +

    JavaScript覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    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 エディタって何を使ってます?


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について