のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,836人
昨日: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
    501 : Name_Not - 2010/10/22(金) 19:17:41 ID:??? (+126,+30,+0)
    502 : Name_Not - 2010/10/22(金) 19:43:46 ID:??? (+68,+29,-37)
    >>501
    配置覚えられるかwwwと思ったが四月馬鹿ネタなのか
    ネタとして買ってみたい気持ちでもあるが
    503 : 485 - 2010/10/22(金) 21:26:25 ID:??? (+8,-30,-192)
    >>486>>487>>488>>489>>490>>491
    ありがとうございます。漠然としすぎました。

    上記>>485)のような構造(これが繰り返しある)をしているサイトのGreasemonkeyを作ろうと思っていて、
    ただ、取得したいa要素にidがついておらず、またdiv、p、h2が別の場所にも散在しているため、

    「hogeクラスのdivの中にある、最初のa要素(本当はhogeの中にa要素は複数ある)」のテキスト部分を
    取り出そうと思ってやってみたのですが、四苦八苦してしまった、という感じです。

    var hogelist = document.getElementsByClassName('hoge');
     for (var i = 0; i < hogelist.length; i++) {

    とした後の、テキスト取得の部分がうまくいかないです。

    hogelist[i].childNodesだったりitemだったり色々組み合わせて試してみたんですが、
    動かなかったり、nullやUndefinedが返ってきたり・・・

    たぶん初歩的な部分が分かってないんだと思うんですが、引き続きアドバイスお願いしたいです
    504 : Name_Not - 2010/10/22(金) 22:02:31 ID:??? (+2,-29,-8)
    とりあえずFirebugsのコンソール使ってみたら?
    505 : Name_Not - 2010/10/22(金) 22:18:21 ID:??? (+15,-30,-108)
    >>503

    var x = document.getElementsByClassName("hoge");
    for(var i = 0; i < x.length; i++){
      var a = x[i].getElementsByTagName("a");
      for(var j = 0; j < a.length; j++){
        var t = a[j].firstChild.nodeValue;
        if(t.nodeType == 3){
          alert(t.nodeValue);
        }
      }
    }
    506 : Name_Not - 2010/10/22(金) 22:23:01 ID:??? (+52,+29,-2)
    今からJava勉強すんのってどうよ
    507 : Name_Not - 2010/10/22(金) 22:27:28 ID:??? (+43,+15,-13)
    Javaスレで聞くのが適切だと思います
    508 : Name_Not - 2010/10/22(金) 23:04:08 ID:??? (+74,+29,-2)
    >>501
    代書屋さんにある和文タイプみたいだ。
    509 : 485=503 - 2010/10/22(金) 23:40:12 ID:??? (+60,-29,+0)
    >>504
    試してみます。

    >>505
    動かないです;;
    510 : Name_Not - 2010/10/22(金) 23:54:18 ID:??? (+69,+15,-14)
    >>509
    全角スペースだからちゃんと半角に直してね
    511 : Name_Not - 2010/10/23(土) 00:07:33 ID:??? (+3,-30,-73)
    Firefox は \u3000 を White Space と解釈できるはずなんだが…。
    http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/7_Lexical_Conventions.html#section-7.2
    512 : Name_Not - 2010/10/23(土) 00:10:46 ID:??? (+66,+29,-9)
    >>509 何で動かないのか書かないと「ああそうですか」で終わっちゃうわけで
    513 : >> - 2010/10/23(土) 00:11:49 ID:??? (+55,+7,-13)
    >>510
    本当に丁寧にありがとうございます。
    ただ、何度やっても、Undefinedしか表示されないです;;
    514 : Name_Not - 2010/10/23(土) 00:14:16 ID:??? (+4,-29,-49)
    >>513
    nodeType == 3(テキストノード)のときしかalert出ないからUndefinedは出ないはずなんだけど
    515 : Name_Not - 2010/10/23(土) 00:18:36 ID:??? (+16,-30,-28)
    >>513
    ミスってたすまん

    -   var t = a[j].firstChild.nodeValue;
    +   var t = a[j].firstChild;

    でもt.nodeTypeがnullになるからUndefinedにはならないんだよね、ちゃんと更新は反映されてるの?
    516 : >> - 2010/10/23(土) 00:51:53 ID:??? (+5,-30,-197)
    >>515
    ありがとうございます。書き換えてみると、今までで一番近い挙動になりました。

    ただ、今回のalertは、hoge 内のa要素すべてのテキストを順番にalertするような挙動のようです。
    実際には、hoge 内には、4つのa要素があり、今回のを動かしてみると、4つのa要素のテキストが順番にalertされました。

    自分が取得したいのは、2番目のa要素のテキストなのですが(1つめのa要素を見逃してました)、
    >>505のalert部分を、

    alert(t[1].nodeValue);

    とするのではいけないのでしょうか・・・?(ちなみにコレにするとalert自体がされなくなりましたorz
    517 : >> - 2010/10/23(土) 01:01:27 ID:??? (-2,-30,-100)
    ちなみに本来のHTMLはこんな感じです(最初から省略しなきゃ良かったorz

    <div class="hoge">
     <p>
      <a href="http://hogehoge0">リンクテキスト0</a>
     </p>
     <h2>
      <a href="http://hogehoge1">リンクテキスト1</a> // これのテキスト部分を取得したい
     </h2>
     <p>
     <span>
      <a href="http://hogehoge2">リンクテキスト2</a>
     </span>
      <a href="http://hogehoge3">リンクテキスト3</a>
     </p>
    </div>
    518 : Name_Not - 2010/10/23(土) 01:23:29 ID:??? (+40,-30,-101)
    Firefoxならこれでいいんじゃない

    Array.forEach(
     document.getElementsByClassName('hoge'),
     function (div) {
      var link = div.getElementsByTagName('a')[1];
      var text = link.textContent;
      alert(text);
     });
    519 : >> - 2010/10/23(土) 02:12:33 ID:??? (+62,+29,-32)
    >>518
    ありがとうございます!無事望んだ挙動が得られました。

    アドバイス頂いた皆様ありがとうございます><
    520 : Name_Not - 2010/10/23(土) 06:43:37 ID:??? (+32,-29,-11)
    forEachってforループと役割が違う?書き方が違うだけ?
    521 : Name_Not - 2010/10/23(土) 11:51:23 ID:??? (+30,-22,-27)
    ・ループを途中で止められない(everyかsomeなら止められる)
    ・ループごとにスコープが生成される(>>327はそんな感じ)
    522 : Name_Not - 2010/10/23(土) 12:14:24 ID:??? (+51,+28,-6)
    疎な配列で番号をちゃんと飛ばす
    523 : Name_Not - 2010/10/23(土) 12:21:38 ID:??? (+62,+29,-15)
    >>521
    無限ループと同じでbreakすれば止められるよね
    524 : Name_Not - 2010/10/23(土) 15:12:09 ID:??? (-1,-29,-14)
    たぶんbreakじゃなくthrowな
    525 : Name_Not - 2010/10/23(土) 16:52:29 ID:??? (+17,+0,-4)
    は?
    526 : Name_Not - 2010/10/23(土) 17:23:28 ID:??? (+0,-28,-14)
    forEachはbreakできないよ
    527 : Name_Not - 2010/10/23(土) 17:58:07 ID:??? (+8,-30,-72)
    javascriptのforEach文ってfor (var i in hoge)でしょ?

    <script>
    var hoge = [1,4,1,4,2,1,3,5,6];
    for (var i in hoge) {
    document.write(hoge[i]+"<br>");
    if (hoge[i] == 3) {
    break;
    }
    }
    </script>
    528 : Name_Not - 2010/10/23(土) 18:13:23 ID:??? (+5,-29,-37)
    >>518からの流れだよ
    >>527はfor-in文。JSにはforEach文なんてないよ。他の言語と混同してる

    Firefoxにはfor each-in文というのがあるけどね
    529 : Name_Not - 2010/10/23(土) 18:19:22 ID:??? (+38,-30,-22)
    for...inやfor each...inは配列に使っちゃ駄目ってmdcに書いてあった
    あとforEachは
    http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach#Compatibility
    と同等ってmdcに
    530 : Name_Not - 2010/10/23(土) 18:25:34 ID:??? (+2,-29,-35)
    ECMAScript 5で標準化されてIE9がやっと最後に実装するというのに
    いまだに「JSにはforEach文なんてない」などとぬかすか
    531 : Name_Not - 2010/10/23(土) 18:28:25 ID:??? (-1,-29,-36)
    >>530 それはArray.prototype.forEach(forEachメソッド)でしょ?
    532 : Name_Not - 2010/10/23(土) 18:28:46 ID:??? (+47,+29,-2)
    流れを見ずに書き込んだ
    スマンコ
    533 : Name_Not - 2010/10/23(土) 22:05:38 ID:??? (+2,-29,-48)
    >>528
    こういう配列やオブジェクトの要素数すべてに対して
    ループを行うものをforeach文というんですよ
    JavaScriptの場合いくつかあるけど
    このfor-inもforeach文の1つ
    534 : Name_Not - 2010/10/23(土) 22:15:08 ID:??? (+63,+29,-28)
    発端の>>520を確認してほしいんだが
    なんで「forEach」から「多言語で言うforeach文」って話になるんだ

    520がそういう意図で聞いたというのなら、>>529だね
    535 : Name_Not - 2010/10/23(土) 22:34:25 ID:??? (+2,-29,-35)
    >>533
    その認識は危険
    JSのfor-inはプロトタイプを辿るから他言語のforeachと違う
    536 : Name_Not - 2010/10/23(土) 23:07:43 ID:??? (-1,-29,-43)
    >>535に加え、for-inの列挙順は実装依存
    以前のバージョンのOperaだったか、後方から列挙していた
    537 : Name_Not - 2010/10/23(土) 23:20:18 ID:??? (+29,-29,-54)
    for-inだけじゃなくて全てにおいて実装依存では
    このスレでJavaScriptエンジンつくろうず
    言語はC#で頼む
    538 : Name_Not - 2010/10/23(土) 23:28:29 ID:??? (-6,-29,-1)
    つSpiderMonkey
    539 : Name_Not - 2010/10/23(土) 23:33:57 ID:??? (+56,+29,+0)
    >>537
    それはさすがに頭が悪い
    540 : Name_Not - 2010/10/24(日) 05:44:59 ID:??? (+17,+29,-14)
    ほんと池沼みたいな奴ばっかだな
    541 : Name_Not - 2010/10/24(日) 15:16:30 ID:??? (+56,-30,-75)
    function getText(n){
    var strings = [];
    getStrings(n, strings);
    return strings.join("");

    function getStrings(n, strings) {
    if (n.nodeType == 3)
    strings.push(n.data);
    else if (n.nodeType == 1) {
    for(var m = n.firstChild; m != null; m = m.nextSibling) {
    getStrings(m, strings);
    }
    }
    }
    }

    このコードが動きません.教科書のサンプル写しました.
    だれか教えてくれませんか
    542 : Name_Not - 2010/10/24(日) 15:30:11 ID:??? (+62,+29,-2)
    >>541
    あまり良いコードとは思えないけど、動くでしょ。
    543 : 541 - 2010/10/24(日) 15:52:21 ID:??? (-1,-29,-21)
    else if (n.nodeType == 1) { のところがうまく動いてないっぽくて...
    544 : Name_Not - 2010/10/24(日) 17:01:09 ID:??? (+85,+23,+0)
    まさかdocumentを与えてないよな
    545 : 541 - 2010/10/24(日) 18:06:42 ID:??? (+67,+28,+0)
    >>544

    すみません.その通りでした....

    ありがとうございました
    546 : Name_Not - 2010/10/24(日) 18:24:08 ID:??? (+16,-30,-152)
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function Rogin(){
    window.open("rogin.html","rogin","");
    if(!$count2){$count++;$count2++;}
    else if($count2){window.alert('本日は既にログイン済みです!');}
    }
    }
    // -->
    </SCRIPT>
    <input type=submit value=ログイン onClick=\"return checkRogin()\">";

    Perlで作成しているページのログインボタンについてなのですが
    $countは累計ログイン数、$count2は今日ログインしたかどうかの記録です
    上のようにしてみたところ上手くいかないのですが、サブルーチン内でcountを増やす処理ってどうすればよいのでしょうか?
    547 : Name_Not - 2010/10/24(日) 18:37:24 ID:??? (+4,-30,-114)
    >>546
    関数の外で変数宣言すれば外でも値が保持される。
    var $count;
    でもページを再表示したら保持されないよ。保持したければcookieとかサーバーサイドで保存しないと。

    余談ですがifの条件でcount2のfalseを評価してるからelseにはif要らない。この場合。
    あと、ログインのスペルは log in だよ。
    あと、JSで変数に$は要らないよ。あってもいいけど
    548 : Name_Not - 2010/10/24(日) 18:58:29 ID:??? (+16,-11,-27)
    あと、JavaScript で未定義の変数をインクリメントしてもうまくいかないよ。
    最初に数値を代入しておかないと。
    549 : Name_Not - 2010/10/24(日) 20:00:55 ID:??? (+5,-30,-81)
    >>546
    Perl側の処理とJavaScript側の処理を混同してるね。
    Perlで生成したHTMLにあるJavaScriptから、Perlスクリプト内の変数に直接アクセスすることはできないよ。
    フォームを使ってPerlスクリプトにパラメータをPOSTするか、
    XMLHttpRequestでPerlスクリプトにアクセスできるようなJavaScriptをHTMLに入れておく。
    550 : Name_Not - 2010/10/24(日) 23:07:38 ID:??? (+73,-30,+0)
    sub LOGINCHECK{
    if($count2){print << " -----END-----";
    <SCRIPT language="JavaScript">
    function checkLogin(){
    window.open("rogin.html","rogin","");
    if(!count2){
    var count = $count + 1;
    var count2 = 1;
    document.all.subject.value=count;
    document.all.subject.value=count2;
    document.login.submit();
    }if(count2){window.alert('本日は既にログイン済みです!');return false;} }
    <form method="post" action="login.cgi" name="login">
    <input type="hidden" name="count">
    <input type="hidden" name="count2">
    <input type=submit value="ログイン" onClick="return checkLogin()"></td></tr>
    </form>
    </script>
    -----END-----
    }else{print "";}
    my $count = $in{'count'};
    my $count2 = $in{'count2'};}
    LoginとRoginのミスはお恥ずかしい・・・
    PERLでの記述になっていますが上記のように作りました
    Java内でPOSTで送信した値をJava終了時に取得させてみたところやはり値の取得ができていません
    POSTの使い方間違ってますかね?
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - タグè¿1⁄2åŠ + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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