1

js 関数で、ユーザーがコンテンツを選択したときに、Web ページのコンテンツの一部であるすべてのノード (HTML 要素) を取得したいと考えています。

これで、window.getSelection() が選択オブジェクトを提供することがわかりました。また、この選択オブジェクトは、その選択の一部であるノード (HTML 要素) のリストを取得する前に、範囲オブジェクトに変換する必要があります。

範囲オブジェクトを取得するにはどうすればよいですか? 私が読んだところによると、ブラウザによって範囲オブジェクトの実装が異なります...最初は、このjs関数をGoogle Chromeでのみ使用します...したがって、コードはGoogle Chromeで完全に機能するはずです...しかし、コードが機能することを望みますGoogle Chrome のすべて/ほとんどの新しいバージョンで... コードは JS または純粋な Jquery の場合があります。

もう 1 つの質問 - 「Rangy」のような js ライブラリを使用する必要がありますか? - http://code.google.com/p/rangy/ この目的のために それとも、純粋なjsまたはjqueryコードを使用してこれを達成できますか?

4

2 に答える 2

3

IE < 9 を除いて、主要なブラウザーはすべて、Selection と Range に対して同じ標準を実装しており、何年もの間それを行ってきました。いくつかの違いがありますが、API は同じです。9 未満の IE を気にしないのであれば、実際には Rangy を使用する必要はありません (gzip する前は約 40KB です)。

選択範囲内のノードを取得するには、次のように選択範囲を取得できます。

var sel = window.getSelection();
if (sel.rangeCount > 0) {
    var range = sel.getRangeAt(0);
}

範囲からノードを取得するには、この回答のコードを使用できます。Rangy を使用した場合は、次のようになります。

var sel = rangy.getSelection();
if (sel.rangeCount > 0) {
    var range = sel.getRangeAt(0);
    var nodes = range.getNodes();
}
于 2012-07-25T08:43:27.867 に答える
0

あなたが直面している問題は、範囲オブジェクトを取得することではなく、選択範囲内の HTML ノードを見つけることであることがわかります。このデモでは、テキストを選択して「get selection html」ボタンをクリックすると、選択したテキストが DOM を含めて取得されます。それを取得したら、jquery コードを使用して DOM ノードのリストを見つけることができます。これについてさらに情報が必要な場合はお知らせください。

于 2012-07-25T08:10:57.887 に答える