
No.3ベストアンサー
- 回答日時:
getSelection ということで IE は考慮外とします。
まず、Firefox のメッセージに「Deprecated method document.getSelection() called. Please use window.getSelection() instead.」と出るように、document.getSelection() は歴史的理由でのみ残されています(HTML5 にも明記)。window.getSelection() を使うべきです。
単に URI を集めたいだけなら
var df = getSelection().getRangeAt(0).cloneContents();
で選択範囲の複製木を DocumentFragment として取得できますので、後は文書順に辿って a 要素を探して行くだけです。Firefox 3.5+ なら Selectors API が最も手っ取り早いでしょう。
var result = Array.map(df.querySelectorAll('a'), function (a) { return a.href; });
もちろん firstChild/nextSibling/parentNode を駆使して地道に辿っても構いませんし、TreeWalker/NodeIterator を使うのも良いでしょう。残念ながら DOM3-XPath は DocumentFragment に適用できません。
※この方法は部分選択された a 要素を含むことになります。完全選択されたもののみ拾いたければ、Selection#containsNode などを用いて選択範囲の両端を調査して下さい。
※また、この方法は文書木の複製を利用しますので、文書木そのものに変更を加えるような作業はできません。例えば、選択範囲内の a 要素を拾ってスタイルを変更するような場合には、(Selection.anchorNode, Selection.anchorOffset) が示す境界点から、(Selection.focusNode, Selection.focusOffset) が示す境界点までを文書順に辿って a 要素を探すことになります。場合分けが多くなりますが、効率の良い探し方を研究して下さい。
参考URL:http://nanto.asablo.jp/blog/2008/10/18/3829312
参考 URL ありがとうございます。
質問する前にかなりググったのですが見つけることが
できませんでした。まさに質問の回答そのものでした。
コードは今の知識では理解できないので、ゆっくりと
調べてみます。きっと簡単な方法が用意されているに
違いないと思っていたのですが、予想外でした。
No.2
- 回答日時:
>選択した部分を取り出す方法は、やはりないのでしょうか
そんなのない!といいたいところだけど、いまのじぶんには
そういいきれるだけのじしんがない!;_;
getSelection()でとれるのは、もじれつ。
ふくまれるもじれつを、のーどのあたいから、ぜんぶけんさくして
はんいをそうさくするか?!(なんと、ひこうりつてきな・・・)
<p>のとちゅうから、したの<p>まで、はんいしていすると
ひっかっかったんだけど・・・。ざんねん!
しばらくまつと、かいとうがもらえるかもしれない。
もしくは、しめきって、さいどたずねるとか・・・
まぁ~おれのはするーして!
(はじめて”ちゃん”づけでよばれたぜぇ!^^;)
No.1
- 回答日時:
かんぺきにゴミだとおもう。
ひろうすべをしらないのでまうすのぼたんをおしたところから、はなしたところまで
Aたぐをひろってhrefをあつめてみた。^^;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>TEST</title>
<body>
<p>abc</p>
<ul>
<li><a href="a">abc</a></li>
<li><a href="b">def</a></li>
<li><a href="c">ghi</a></li>
</ul>
<p>abc</p>
<script type="text/javascript"><!--
//@cc_on @set @V = ( @_jscript_version >= 5.5 )
/*@if( @V ) attachEvent( 'on' + @else@*/ addEventListener (/*@end@*/
'load', (function ( ) { return function ( evt ) {
var se, ee;
document./*@if(@V) attachEvent( 'on'+ @else@*/ addEventListener(/*@end@*/
'mousedown', function ( evt ) {
se = evt./*@if( @V ) srcElement @else@*/ target /*@end@*/;
}, false);
document./*@if(@V) attachEvent( 'on'+ @else@*/ addEventListener(/*@end@*/
'mouseup', (function ( next ) { return function ( evt ) {
var a = [];
ee = evt./*@if(@V) srcElement @else@*/ target /*@end@*/;
while( (ee != (se = next( se ))) && se )
'A' == se.nodeName && a.push( se.getAttribute( 'href' /*@, 2@*/ ) );
alert(a);
};})(
function ( e ) {
var n;
if( n = e.firstChild ) return n;
do if( n = e.nextSibling ) return n; while ( e = e.parentNode );
return null;
}
), false);
};})(), false);
//ぜんかくくうはくは、はんかくにでもなおしてね。
//-->
</script>
この回答への補足
babu_baboo ちゃん(^^; 回答ありがとうございます。
全角空白を半角にして試してみたのですが、うまく
選択できていないようでした。
abc の部分を選択すると空のパネルが表示されました。
abc ~ def までを選択すると abc のリンク先の a だけ
が拾えました。
実際にやりたいのはひと様のページを表示し、
URL 欄に
javascript:var links=document.getElementsByTagName("a");var str="";for (var i=0;i<links.length;i++) {var link=links[i];str=str+link.href+"\n";} alert(str);
と入力するようなことなのです。この例では、表示している
ページのすべてのリンク先が表示されてしまうのですが、
選択したところだけにしたいのです。
選択した部分を取り出す方法は、やはりないのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- 画像編集・動画編集・音楽編集 WIN10で「切り取り&スケッチ」が上手く使えません。 1 2022/09/01 22:56
- その他(Microsoft Office) 選択行の列範囲に二重線を引く 3 2022/06/08 12:21
- Excel(エクセル) エクセルのマクロを教えてください。 4 2022/10/06 08:53
- PDF PDFの表がエクセルに貼り付けられなくなってしまいました。 5 2022/06/03 09:07
- Excel(エクセル) 範囲選択すると最後の一行で急に出てくる#が邪魔で困っています。 ExcelでVLOOKUPで引っ張っ 2 2022/08/31 10:03
- Excel(エクセル) [並べ替えの前に]、[選択範囲を拡張する]のが煩わしいッ! 1 2023/02/28 22:40
- 一眼レフカメラ 被写界深度 3 2022/09/20 00:53
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
- 画像編集・動画編集・音楽編集 GIMPについて質問 ブラシで特定の部分を塗りたいのですが、事前に文字入れをしていてその文字入れの範 2 2023/02/27 20:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsで質問です。 ボタンが二つ存...
-
jQueryで同じクラス名のものを...
-
画像の表示位置
-
switch文のswitch(n)の部分を複...
-
Colorboxがうまく設置できません
-
フォームが空欄の時にフォーム...
-
セレクトを全て選択されていな...
-
sessionStorageを調べています。
-
スマホ上で、左右スワイプで次...
-
セレクトボックスを2つ設けて選...
-
GoogleChart 階層ごとのブロッ...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
Outlookのアカウントがあるとメ...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javascriptでリンクの書き換え
-
選択範囲のリンク URL の抽出
-
bxsliderで画像毎に表示時間を...
-
自動目次作成のjavascriptの改...
-
URLによってHTMLのテキストを変...
-
要素ごとにイベントが発生させたい
-
Javascriptを使ってQRコード読...
-
jQueryで外部テキストファイル...
-
SQLのmaxで求めた値を変数に代...
-
JavascriptからPHPへのAjax通信...
-
JavaScriptでtabindexの変更っ...
-
カンマ区切りのデータを配列に...
-
[jQuery UI] sortableを使いaja...
-
jQueryのblockUIをformのボタン...
-
階層別の組織図の自動作成について
-
FullCalendar の複数月表示につ...
-
Selenium4でボタンをクリックで...
-
tableのtr要素をドラッグ&ドロ...
-
インラインフレームを自動更新...
-
マスターページ使用時のJavascript
おすすめ情報