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

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - タグè¿1⁄2åŠ + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    651 : Name_Not - 2010/10/28(木) 13:09:57 ID:??? (+31,-29,-18)
    onclick属性とか用じゃないの?
    type属性は必須だし
    652 : Name_Not - 2010/10/28(木) 14:47:14 ID:??? (+62,+29,+0)
    申し訳ない、なんか勘違いしていた私。 >>651
    654 : Name_Not - 2010/10/28(木) 16:00:55 ID:??? (+10,-30,-36)
    >>648
    HTML4.01 ではscript要素の規定値が text/javascript でないため、その指定がないと HTML-lint ではエラーになる。
    HTML5 では不要…というか未定義。
    655 : Name_Not - 2010/10/28(木) 16:03:17 ID:??? (+56,-29,-12)
    >>653
    getElementsByClassName
    656 : Name_Not - 2010/10/28(木) 16:30:39 ID:??? (+53,+21,-13)
    >>655
    IEだったらきかないよ
    657 : Name_Not - 2010/10/28(木) 16:41:00 ID:??? (+52,+29,-14)
    効かないも何もそれ先行実装
    659 : Name_Not - 2010/10/28(木) 16:44:26 ID:??? (+8,-30,-35)
    >>654
    HTML-lintはscript要素もトリガになるのか
    イベント属性を使わないならデフォルトスクリプト宣言は必要ないように思えるけど

    >>656
    IE8ならdocument.querySelectorAll('.hoge')
    それ以前も対象にするなら全要素ループでチェック
    661 : 655 - 2010/10/28(木) 17:00:09 ID:??? (+3,-30,-138)
    getElementsByClassName が IE8- に対応しないのはわかってるが、「getElementByIdのように、classで要素を取得するメソッド」といえば getElementsByClassName だと思う。
    getElementsByClassName は IE9 からサポートされる。

    Internet Explorer 9 Beta 開発者ガイド
    http://msdn.microsoft.com/ja-jp/ie/ff468705.aspx#_DOM_L2_HTML
    662 : Name_Not - 2010/10/28(木) 17:04:58 ID:??? (-1,-29,-10)
    あ、querySelectorAllもliveなNodeListじゃない(>>629-)
    一応。
    663 : 655 - 2010/10/28(木) 17:08:06 ID:??? (+24,-30,-135)
    >>660

    > ・戻り値はliveなNodeListではなく、ただの配列なので注意
    non-live には同意するが、配列だろうか…?

    var p = document.querySelectorAll('p');
    console.log(Object.prototype.toString.call(p)); // "[object NodeList]"
    console.log(p instanceof Array); // false

    戻り値は non-live な NodeList だと思ってた。
    664 : 655 - 2010/10/28(木) 17:11:18 ID:??? (+4,-30,-30)
    >>663
    こうすれば良かった。

    console.log(p instanceof NodeList); // true

    やはり、戻り値は NodeListインターフェース のオブジェクトな気がする。
    665 : Name_Not - 2010/10/28(木) 17:12:07 ID:??? (+52,-8,+0)
    >>663
    あいや、>>658のスクリプトの話<ただの配列
    666 : 655 - 2010/10/28(木) 17:15:51 ID:??? (+64,+29,-4)
    >>665
    申し訳ない、アンカー先を読み間違えていたようだ…。
    667 : Name_Not - 2010/10/28(木) 17:18:56 ID:??? (+8,-29,-45)
    non-liveってあとから追加や削除をしても取得したときの情報のままってこと?
    変更後に再度取得しなおせば変更後の情報が得られるの?
    668 : Name_Not - 2010/10/28(木) 17:35:03 ID:??? (+12,-29,-16)
    >>667
    その通り。

    getElementsByClassName()の落とし穴
    http://www.insuite.jp/blog/archives/80
    669 : Name_Not - 2010/10/28(木) 17:43:25 ID:??? (-1,-30,-168)
    >>668のリンク先では non-live にするために配列化しているが、live の挙動を利用すればもっと簡単に書ける気がした。

    ---
    <style type="text/css"><!--
    .change { color: #ff0000; }
    --></style>
    </head>
    <body>
    <div class="test">壱</div>
    <div class="test">弐</div>
    <div class="test">参</div>
    <script type="text/javascript"><!--
    (function () {
     var elements = document.getElementsByClassName('test');
     while (elements.length) {
      elements[0].className = 'change';
     }
    })();
    //--></script>
    ---
    670 : 668 - 2010/10/28(木) 17:58:50 ID:??? (+20,-30,-259)
    >>667
    ごめん。微妙に間違っていたっぽい。

    ---
    <div class="test">壱</div>
    <div class="test">弐</div>
    <div class="test">参</div>
    <script type="text/javascript"><!--
    (function () {
     function byClassName () {
      var elements = document.getElementsByClassName('test');
      while (elements.length) {
       elements[0].style.color = '#ff0000';
       elements[0].className = 'change';
      }
     }

     var elements = document.querySelectorAll('.test');
     console.log(elements[0].style.color); // ""
     byClassName();
     console.log(elements[0].style.color); // "rgb(255, 0, 0)"
    })();
    //--></script>
    ---

    live か non-live かっていうのは NodeListインターフェース (わかりやすいところではlength) のみに影響するらしい。
    element.style.color など Elementインターフェースの変更は即反映される。

    # 自信はないので、鵜呑みにしないで欲しい。(えらい人の解説に期待…。)
    671 : Name_Not - 2010/10/28(木) 19:20:56 ID:??? (+10,-30,-142)
    >>670
    NodeListからDOMが消える前提なのがおかしい。
    場合によってはtestクラスを残そうとしたりすると無限ループに陥る。
    素直に配列(NodeListだけど)の後ろからループ回せばいいじゃん。
    要素の順序が勝手に入れ替わったりしないことは保証されてるし。

    (function test() {
      var elements = document.getElementsByClassName("test");
      for (var i = elements.length - 1; i >= 0; i--) {
        var e = elements[i];
          e.className = "change";
          e.style.color = "#ff0000";
      }
    })();
    672 : 670 - 2010/10/28(木) 21:04:58 ID:??? (+8,-29,-33)
    >>671
    指摘ごもっとも。
    後ろからループ回せば問題ないということに気が付かなかった…。

    # デクリメントすると <!-- comment -->内に置けないので、外部スクリプト化するなり、コメントをなくすなりする必要はあるかな。
    673 : Name_Not - 2010/10/28(木) 21:12:34 ID:??? (+27,-30,-248)
    画像のうえにテキストを表示させる方法を教えてください。
    一応自分でも挑戦してみたのですが、下の方法だと
    画像がクリッカブルじゃなくなってしまいます。(FireFoxで動作確認しています)

    function add_note(obj, note) {
    var elem = document.createElement("span");
    elem.innerHTML = note;
    elem.style.position = "absolute";
    elem.style.left = obj.offsetLeft;
    elem.style.width = obj.width;
    elem.style.top = obj.offsetTop;
    elem.style.height = obj.height;
    var objBody = document.getElementsByTagName("body").item(0);
    objBody.appendChild(elem);
    }

    <a href="..."><img src="..." onload="add_note(this, 'aaaaa')"></a>
    674 : 673 - 2010/10/28(木) 21:14:46 ID:??? (-1,-29,-19)
    書き忘れましたが、画像は原寸ではなくて縮小表示させたかったので、imgタグを使っています。
    675 : Name_Not - 2010/10/28(木) 21:16:36 ID:??? (+14,-29,-8)
    >>672
    i-- → i-=1じゃね。

    >>673
    js以前の問題に見える。<a>でくくらないってのはだめなのか?
    676 : Name_Not - 2010/10/28(木) 21:19:51 ID:??? (+104,+1,-31)
    今どきJSのコードをコメントで囲う必要ってあるの?
    コードを表示してしまうのって携帯ぐらいだと思ってた。
    677 : 673 - 2010/10/28(木) 21:30:29 ID:??? (-1,-30,-29)
    >>675
    <a>でくくらずに、imgタグのonClickにopen("...") と書いてみたんだけれど
    ブラウザのポップアップブロックに引っかかってちょっと上手くないですねぇ。
    いい方法あるかなぁ。
    678 : Name_Not - 2010/10/28(木) 21:45:14 ID:??? (+8,-29,-6)
    >>676
    5年前の携帯でもscriptとnoscriptを認識するぞ・・
    679 : 675 - 2010/10/28(木) 21:49:23 ID:??? (+3,-30,-72)
    あ、ごめん。
    「画像がクリッカブルになってしまいます。」って読み間違えてた。

    1,z-index指定。(で出来るはず。)
    2,<a href="..."><span style="ほにゃらら">aaaa</span><img src="..."></a>
    jsでやる必要がなければ2でいいと思うけどな。jsがoffの人とかも見れるし。
    680 : Name_Not - 2010/10/28(木) 21:53:03 ID:??? (-1,-29,-15)
    img要素にtitle属性つけとけば2,3秒で指定した文字がツールチップで出てくるよね
    681 : Name_Not - 2010/10/28(木) 23:05:57 ID:??? (+101,+29,-26)
    >>676
    XHTMLに厳密に従うと、本当にコメントになってスクリプトが無い事になるから
    今時ならもうやらん方がいい。
    682 : Name_Not - 2010/10/28(木) 23:23:39 ID:??? (+71,+29,-15)
    >>681
    そーなのかーって思ったけど、全部jsファイルで外部化すればいんじゃね?って思った
    とりあえず今後は<!--を外すことにする
    683 : Name_Not - 2010/10/28(木) 23:24:24 ID:??? (+0,-28,-28)
    >>678
    ドコモ携帯はstyle要素の中身すら晒してしまうで
    684 : Name_Not - 2010/10/28(木) 23:27:37 ID:??? (+86,+29,-35)
    >>676
    ブラウザとしてなら必要ないかもしれないが、他のパーサー通すときにコメントアウトしていないと困るパターンはある。
    XHTMLなら外部スクリプト化するか、CDATAセクションを使うべき。
    XMLパーサーを通した時にどのようなノードを生成するか考えてみるといい。
    685 : 684 - 2010/10/28(木) 23:39:00 ID:??? (+3,-30,-117)
    XHTML文書は <>& をエスケープしてもいいが、メンテが面倒になる。

    <p>foo</p>
    <script type="application/javascript">
    (function () {
     var p = document.getElementsByTagName('p');
     for (var i = 0, l = p.length; i < l; i++) {
      p[i].className = 'foo';
     }
    })();
    </script>

    # "Content-Type: text/html" を出力するなんちゃってXHTML文書はXHTMLにする意味があるのか、と思うこの頃…。
    686 : Name_Not - 2010/10/28(木) 23:47:21 ID:??? (+52,-29,-78)
    id付きの要素がスクリプトによってドキュメントに追加されるのですが
    追加される以前にdocument.getElementByIdで取得しようとしてもnullになります
    追加されたかどうか判断するにはどうすればいいですか?
    nullじゃなくなるまでずっとループを回すんですか?
    687 : Name_Not - 2010/10/28(木) 23:49:03 ID:??? (+3,-29,-38)
    ところで、「今時 = XHTML」なのかな?
    docomoなどの携帯電話で扱われるXHTML文書は XHTML 1.x や XHTML5 とかけ離れた仕様だと思っていて、それを今時というのには抵抗があるのだが…。
    688 : Name_Not - 2010/10/28(木) 23:51:37 ID:??? (+60,+27,-24)
    >>686
    ちょっと何をやりたいのかよくわからない。
    必要な処理を行うときに getElementById の返り値をみるだけだと思うんだけど…。
    689 : Name_Not - 2010/10/29(金) 00:03:47 ID:??? (+62,+29,-60)
    別のスクリプトによって、任意のタイミングでそのidの付いた要素がドキュメントに挿入されます
    挿入されたその要素に対して何か操作をしたいので
    その要素が挿入されたかどうかはどうやって判断すればいいのかなと
    690 : Name_Not - 2010/10/29(金) 00:03:59 ID:??? (+30,-29,+0)
    XHTMLはオワコン
    691 : Name_Not - 2010/10/29(金) 00:05:24 ID:??? (+18,-29,-54)
    >>686,689
    getElementById は該当要素がなかったときにnull を返す。
    操作時に getElementById の戻り値が null でなかったら処理をするようにすればいい。
    692 : Name_Not - 2010/10/29(金) 00:12:23 ID:??? (+101,+29,-4)
    つまりnullじゃなくなるまでループを回すってことですか?
    693 : 691 - 2010/10/29(金) 00:20:12 ID:??? (+106,+29,-114)
    >>690
    終わってないよ!XHTML5 が残ってるよ!(HTML5 の方が注目度高いだろうけど。)
    # XHTML書く人はIEなんか無視すればいいと思う。IE無視できない人はHTML書けばいいと思う。

    >>692
    idの付いた要素をドキュメントに挿入したタイミングで処理を行えばいいじゃなイカ。
    処理のタイミングの問題としか思えないのにそれに類する情報がないので何とも言えない。
    コードかURLを開示してもらうのが手っ取り早いかと。

    あと、連投するならレス番をつけないと流れを追いづらい。
    694 : Name_Not - 2010/10/29(金) 00:28:35 ID:??? (+17,-29,-67)
    >>692
    たとえばJavaScriptでFlashを埋め込んで、
    Flashのロードが完了したらJavaScriptからFlashを操作するときとか、
    俺はsetTimeoutで100~200msごとくらいにロード状況をチェックして、
    ロード完了時に操作を受け付けるようにしてる。
    で、30秒~1分くらい経ってもロードできないときは中断してエラーを吐くようにする。
    695 : 686 - 2010/10/29(金) 00:43:36 ID:??? (-1,-29,-30)
    どうもありがとうございます
    setIntervalじゃなくてsetTimeoutを100~200msごとくらいに使うんですね
    696 : Name_Not - 2010/10/29(金) 00:54:21 ID:??? (+4,-23,-29)
    setIntervalは時間がきたら有無を言わさず処理しちゃうから、
    処理が重複するリスクがあったりする
    こういう場合はsetTimeoutで一回一回チェックしたほうがいいと思うよ
    697 : Name_Not - 2010/10/29(金) 01:21:20 ID:??? (+70,+29,-9)
    どうでもいい話だが、>>693をイカ娘が打ってると思うとなごんだw
    698 : Name_Not - 2010/10/29(金) 01:23:12 ID:??? (+2,-29,-19)
    DOMNodeInsertedってそういう時に使うんじゃないの?
    699 : Name_Not - 2010/10/29(金) 05:26:58 ID:??? (-12,-30,-81)
    jQueryを使って文字列置換をしているのですが、

    $(function(){
     var tmp = $(".class0");
     tmp.html(tmp.html().replace(/aaa/ig, "bbb"));
    })

    この aaa 部分を変数を使って指定するにはどうしたら良いでしょうか?
    700 : Name_Not - 2010/10/29(金) 06:30:47 ID:??? (-2,-30,-61)
    var arr = [/aaa/];
    alert(arr[0]);
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - タグè¿1⁄2åŠ + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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