2011-07-19 11 views
3

JavaScriptを使用して選択したテキストを強調表示した後、前と次のHTML要素を削除したいのですが、選択/強調表示されたテキストを取得する方法しか知りません。 ?ありがとうございました。javascriptで前後のHTML要素を削除する

function text() { 
    if (window.getSelection) 
     return window.getSelection(); 
    if (document.getSelection) 
     return document.getSelection(); 
    if (document.selection) 
     return document.selection.createRange().text; 
    return ""; 
} 

function delete_Tag() { 

    var txt = text(); 
     // txt already have the selected text 
     // I don't know how to do in here !!! 
     // I use the use the find the parentNode, but don't know how to delete the </span> 
} 

<input type='button' value='Delete Tag' onclick='delete_Tag()' /> 

<p id='text'> 
<span class="B">I am </span> 
<span class="B">working in </span> 
<span class="C">ABC company.</span> 
</p> 

例えば

<p id='text'> 
<span class="B">I am </span> 
working in 
<span class="C">ABC company.</span> 
</p> 
:私は OR「オーキン」「で働く」(選択すると、範囲内でなければなりません)、ボタンをクリックして、それが

期待される結果が表示されます強調するために、マウスを使用します

+0

ためworking exampleを作成していますか? –

+0

@Molecule、予想される動作はありませんが、コードでは変更しないでください。 – John

+0

結果は 'working in'と同じでなければならないか、変更する必要はありませんか? –

答えて

0

Jquery hideメソッドを使用できます。

+0

あなたの答えをありがとうございますが、jQueryやその他のライブラリではなく、基本的なjavascriptが必要です。 – John

+0

この質問の難しい部分は、削除する要素を特定することであり、これはあまり役に立ちません。 'hide'はとにかく要素を削除しません。それは' remove'です。 – Quentin

+0

@Quentin:はい、それは 'remove'でなければなりません。私はJqueryがハイライトされたテキストを取得するイベントを持っているかどうかを調べるためにグーグルで行っていました。しかし、ジョンはJqueryを望んでいない。 – xyz

3

あなたは、次のようなものを使用することができます。

var span = document.getElementsByClassName("B").item(0); 
     var parent = span.parentNode; 
     var sibling = span.nextSibling; 
     var textNode = document.createTextNode(span.innerHTML); 

     parent.removeChild(span); 
     parent.insertBefore(textNode, sibling); 
+0

あなたの答えをありがとうが、私はどのようにターゲットを私の場合に適用するのか分からない、あなたはもっと説明しますか? – John

+0

私はあなたの代わりにdelete_tag関数を使用して私の答えを更新しました。また、eパラメータを手動で渡します。更新された投稿を見てください。それは動作しますか? –

+0

大丈夫、間違いですが、クリックイベントが入力用であることがわからなかったので、e.targetは間違ったターゲットです。私は数分で私の例を更新します。 –

0

あなたの苦労は、要素を削除するように思わ、jQueryのを使用するのではなく、選択した要素を非表示にする方が効率的かもしれません。

0

余分なものが必要です。あなたはdocument.body.onmousedownとdocument.body.onmouseupをキャッチする必要があります。このイベントのターゲットが同じノードである場合、このノードを後で使用するために保存する必要があります。

私が期待されているものをbehabiour「ABCで作業」を選択した場合、私はあなた

+0

あなたの答えをありがとうが、私はあなたの例がサイト上で動作しないことがわかった、それを見て気にしますか? – John

+0

@ジョン、それは[jsfiddle](http://jsfiddle.net/molecule/EFQL2/11/)でうまく動作します。私はあなたのサイトコードを見ることができなかった場合私は助けることができなくなります。 –

+0

作業例を開き、マウスを使って「作業中」を強調表示させてから、ボタンをクリックします。何か問題はありましたか? – John

関連する問題