人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

jQueryブックマークレットを用いて… Add Star

以下のようなHTML
<a href="url">hoge</a>
があるページ内に複数あったとき、
目的として「urlとhogeの値をパースし結果をブラウザ上で一覧表示」する方法について質問です。
添付のファイルはネットを参考に任意のタグの値を抽出し、結果をブラウザ上に一覧表示するブックマークレットとなります。
下記のスクリプトをブックマークレットとして保存して実行すると任意のタグ属性を指定するpromptが表示されますが、今回は目的のタグが上記のように定まっているのでpromptの表示は不要ですが、ソースをどのように修正すれば意図する内容が得られるかご教示頂けますでしょうか。
よろしくお願いいたします。

[Bookmarklet]
ExtendedURL=javascript: (function () { var d = document; var s = d.createElement('script'); s.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'; d.body.appendChild(s)})();jQuery(function () { var out = ''; var prt = prompt('Please enter the TAG type for parse.', 'dt'); var user = prt.toLowerCase(); jQuery(user, this).each(function () { out += $(this).text() + '\n'; }); document.write('<textarea cols=\'100\' rows=\'100\' selected=\'selected\'>' + out + '</textarea>'); $('textarea').select();});

●質問者: mithmarc
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

質問者から

urlとhogeの間はタブ送り(それが不可であればスペース)で間隔を空け、1行ずつ表示したいと考えております。


1 ● lang_and_engine
●500ポイント

これでどうでしょうか


javascript: (function () { var d = document; var s = d.createElement('script'); s.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'; d.body.appendChild(s)})();jQuery(function () { var out = ''; jQuery("a", this).each(function () { out += $(this).attr("href") + "\t" + $(this).text() + '\n'; }); document.write('<textarea cols=\'100\' rows=\'100\' selected=\'selected\'>' + out + '</textarea>'); $('textarea').select();});


2 ● a-kuma3
●500ポイント

こんな感じで、あってますか?

javascript: (function () { var d = document; var s = d.createElement('script'); s.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'; d.body.appendChild(s); $(function () { var out = ''; ("A").each(function() { var url = $(this).attr("href"); var txt = $(this).text(); out += url + "\t" + txt + "\n"; }); var ta = d.createElement('textarea'); ta.cols = 100; ta.rows = 100; ta.innerHTML = out; d.body.appendChild(ta); ta.select(); }); })();

Bookmarklet を作るとき、インデントが無いと間違いやすいので、外部スクリプトファイルに書くとデバッグやメンテが楽チンです。
外部スクリプトは、ローカルに Apache を立てておくか、Github なんかを使う。

例えば、この回答のだと、以下のようなスクリプトを http://localhost/hoge.js でアクセスできるところに置いておきます。

(function () {
 var d = document;
 var s = d.createElement('script');
 s.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js';
 d.body.appendChild(s);
 $(function () {
 var out = '';
 $("A").each(function() {
 var url = $(this).attr("href");
 var txt = $(this).text();
 out += url + "\t" + txt + "\n";
 });
 var ta = d.createElement('textarea');
 ta.cols = 100;
 ta.rows = 100;
 ta.innerHTML = out;
 d.body.appendChild(ta);
 ta.select();
 });
})();

で、Bookmarklet はこんな感じ。

javascript:(function(src){var s=document.createElement('script');s.setAttribute('type','text/javascript');s.setAttribute('charset','UTF-8');s.setAttribute('src',src);document.body.appendChild(s);})('http://localhost/hoge.js');

最後の方にある URL を書き換えるだけです。


はてなには、Hatena::Let というサービスもあります。
先に書いたようなことを、まるっとWebサービスとして提供してくれています。




追記です。
jQuery を使う必要ないんじゃね? と思ったので、素の DOM だけで書いたのがこちらです。

javascript: (function () { var d = document; var lnks = document.getElementsByTagName("A"); var out = ''; for (var i = 0 ; i < lnks.length ; ++i) { var url = lnks[i].href; var txt = lnks[i].innerHTML; out += url + "\t" + txt + "\n"; } var ta = d.createElement('textarea'); ta.cols = 100; ta.rows = 100; ta.innerHTML = out; d.body.appendChild(ta); ta.select(); })();


7ccさんのコメント
innerHTMLは特殊文字がエスケープされてしまうので、textContent推奨です。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ