2

タグ要素を壊さずに、選択したテキストをスパンで囲んだままにする方法(javascript)

1つの例:

元のテキスト:

<p> a foo </p>
<p> another bar </p>

選択:

フォアバー_o
anoth

HTMLのネスト構造を壊したくない:

 <p> a fo<span>o </p>
<p> anoth</span>er bar </p>

私はこのようなものが必要です:

 <p> a fo<span>o </span></p>
 <p> <span>anoth</span>er bar </p>
4

3 に答える 3

2

不可能です。これを想像してください:

<p> a foo </p>
<p> another bar </p>

その結果:

フー
・アナザー・バー

ユーザーが一部のみを選択した場合、次のように言いましょう。

前のバーo
anoth

あなたはhtmlのネスト構造を壊します:

 <p> a fo<span>o </p>
<p> anoth</span>er bar </p>

これは、1 つのタグだけでは実現できません。

于 2012-10-11T19:03:24.923 に答える
1

選択したテキストの各文字を繰り返し処理し、文字が存在するDOMノードごとに文字をグループ化する必要があります。グループを作成したら、各グループを<span>タグでラップする必要があります。

これを行うには、選択オブジェクトのプロパティanchorNodefocusNodeプロパティを確認し、他のもっともらしいノード(つまり、アンカーノードとフォーカスノードの共通の親/祖先のすべての子)をcontainsNode()メソッドでテストします。

于 2012-10-11T19:29:16.013 に答える
1

この優れた treeWalker 実装を使用して、ここにjsFiddleあります。これがうまくいくかどうか教えてください。補足として、rangyを使用すると素晴らしいです。

編集:いいえ、待って、修正しました。

于 2012-10-11T20:59:25.657 に答える