のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,646,141人
昨日: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,-193)
>>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:??? (+59,-29,+0)
>>504
試してみます。

>>505
動かないです;;
510 : Name_Not - 2010/10/22(金) 23:54:18 ID:??? (+67,+13,-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:??? (+65,+29,-9)
>>509 何で動かないのか書かないと「ああそうですか」で終わっちゃうわけで
513 : >> - 2010/10/23(土) 00:11:49 ID:??? (+55,+7,-14)
>>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:??? (+31,-21,-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:??? (+18,+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,-37)
>>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,-49)
>>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,+24,+0)
まさかdocumentを与えてないよな
545 : 541 - 2010/10/24(日) 18:06:42 ID:??? (+68,+28,+0)
>>544

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

ありがとうございました
546 : Name_Not - 2010/10/24(日) 18:24:08 ID:??? (+16,-30,-153)
<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:??? (+13,-14,-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åŠ + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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