- ベストアンサー
GreaseMonkeyについて
まだjavascriptの勉強をし始めて、2日目の者です。 そこで、質問です! GreaseMonkeyで、 <dd class="b-click"> <a href="http://xxx">クリック</a> </dd> というものが含まれるページがあるとします。 この『http://xxx』に移動するためには、 どういうスクリプトを書けばいいのでしょうか。 自分なりに、いろいろやってみたのですが、 全く反応がなかったので、質問させていただきました。 回答よろしくお願いします!
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ああ、ごめん。HTMLを貼りつけ忘れた。 ------------------------------------------ <dd class="b-click"> <a href="http://xxx">クリック</a> </dd> <dd class="b-click"> <a href="http://yyy">クリック</a> </dd> <dd class="b-click"> <a href="http://zzz1">クリック</a> <a href="http://zzz2">クリック</a> </dd> <script type="text/javascript"> // ddタグを取得 var dd = document.getElementsByTagName('dd'), a, output = []; // ddタグの個数分チェックする。 for( var i = 0; i < dd.length; i++ ) { // ddタグがclass="b-click"を持っているかチェック // 持ってなかったら何もしない。 if( dd[i].getAttribute('class').indexOf('b-click') > -1 ) { // ddタグの子要素にaタグがあるかないかチェック a = dd[i].getElementsByTagName('a'); for( var j = 0; j < a.length; j++ ) { output += a[j].href + '\n'; } } } alert( output ); </script> ------------------------------------------
その他の回答 (4)
- reggaepunc
- ベストアンサー率59% (64/108)
ごめんね。僕も言い過ぎました。 それはそれとして、 これでどうかな? わからなかったら質問すべし。 ----------------------------------------------------- // ddタグを取得 var dd = document.getElementsByTagName('dd'), a, output = []; // ddタグの個数分チェックする。 for( var i = 0; i < dd.length; i++ ) { // ddタグがclass="b-click"を持っているかチェック // 持ってなかったら何もしない。 if( dd[i].getAttribute('class').indexOf('b-click') > -1 ) { // ddタグの子要素にaタグがあるかないかチェック a = dd[i].getElementsByTagName('a'); for( var j = 0; j < a.length; j++ ) { output += a[j].href + '\n'; } } } alert( output ); -----------------------------------------------------
- reggaepunc
- ベストアンサー率59% (64/108)
同じwindowでどうやって、複数ページに遷移するの? 具体的な動作が不明確なのでこれ以上作らない。 基本部分のスクリプトを提示しましょう。 コピペで動く。 --- // ==UserScript== // @name jsredirect // @namespace benikujyaku // @include * // ==/UserScript== (function() { new function() { // iframe内では実行させない if (window != unsafeWindow.top) { return; } var target = document.getElementById('hoge'); if( target ) { document.location = target.href; } else { alert( 'このページにはid = hogeのaタグが存在しません。' ); } }(); })(); ------------------------------------- getElementsByTagName()まで書けてるなら、 -------------------------- var a = document.getElementsByTagName('a'); var a = a[0].href; -------------------------- で取得できるよ。 これは配列です。 jsを作る時はfirefoxとfirebugでconsole.debug()が便利だよ。 *** プログラミングの動作仕様を文章で説明するのは高等テクニックが必要だから、 スクリプトでやりとりするのが吉じゃないかな、と思うよ。
お礼
reggaepuncさんに指摘していただいた点を直そうと思います。 回答ありがとうございました^^
補足
すいません、自分の文が誤解をよんでしまって。 >同じwindowでどうやって、複数ページに遷移するの? そういう意味ではなくて、a要素が複数あるページの、 例えば、 // ==UserScript== // @name example // @namespace example // @description example // @include xxxx://xxx.xxx/* // ==/UserScript== (function() { new function() { // iframe内では実行させない if (window != unsafeWindow.top) { return; } var target = document.getElementsByTagName('a'); var a = target[0].href; if( target ) { document.location = a; } else { alert( 'このページにはid = hogeのaタグが存在しません。' ); } }(); })(); こういうものだと、 一番最初のa要素のhrefにページ移動してしまうわけじゃないですか。 xxxx://xxx.xxx/1 だとこのa要素10個目にあって、 xxxx://xxx.xxx/2 だと13個目にあったりと、 ページごとにa要素の場所が違ってしまいます。 <dd class="b-click"> <a href="yyyy://yyyy.yyy">クリック</a> </dd> なので、自分としては、 このClass"b-click"から子ノードaのhrefに移動するよう、 プログラムを書いてみたのですが、 うまく動かなかったのです。 自分としては、その方法を教えてもらいたかったのですが、 この質問文では意味不明ですね、すいません。 >具体的な動作が不明確なのでこれ以上作らない。 ごめんなさい、不快にさせてしまって。 >jsを作る時はfirefoxとfirebugでconsole.debug()が便利だよ。 console.debug()については知りませんでした。 ありがとうございます^^ >プログラミングの動作仕様を文章で説明するのは高等テクニックが必要だから、 >スクリプトでやりとりするのが吉じゃないかな、と思うよ。 そうですね、ご指摘ありがとうございます。 初質問だったもので・・・。 これからはそうしていきたいと思います。 回答ありがとうございました^^
- reggaepunc
- ベストアンサー率59% (64/108)
リンクが複数ある時は別ウィンドウでページを表示させるということでしょうか? スクリプトのロジックしては、 aタグのhrefを取得 ↓ document.locationでページ移動する。 で、いけるはずですが。
補足
同じウィンドウでも構いませんが、 そのaタグのhrefの取得方法でつまづいています。 getElementsByTagNameで取得しようとしても、 a要素が複数あるので。 また、親ノードから子ノードを取得しようとしてもうまくいかなかったので。 できれば、スクリプトの内容を示して欲しいです。 よろしくお願いします。
- reggaepunc
- ベストアンサー率59% (64/108)
移動するのは、いつですか? ページを読み込んだ時に自動(クリック無し)で移動したいということですか?
補足
回答ありがとうございます! すいません、説明不足で。 >移動するのは、いつですか? 5秒でお願いします。 >ページを読み込んだ時に自動(クリック無し)で移動したいということですか? はい、そういうことです。 また要素は数十個あります。 回答よろしくお願いします^^
お礼
いろいろとありがとうございました! if( dd[i].getAttribute('class').indexOf('b-click') > -1 ) だとなぜか動かなかったので、 if((dd[i].getAttribute('class'))&&(dd[i].getAttribute('class').indexOf('b-click') > -1) ) { に書き換えたら動きました! 最後まで答えていただき、本当にありがとうございます!