2011-11-15 10 views
0

私は、次のものが含まれていた文字列があります。ストリップ不要なタグ(なしjQueryの)

<span>A</span>BC<span id="blabla">D</span>EF 

を私はやるスパンを削除するにREGX式で機能を置き換えるJavaScriptを使用できるようにしたいですidを持たない。その結果は次のようになります

ABC<span id="blabla">D</span>EF 

私は本当にjQueryの使用に興味がありません。純粋なJavaScriptを使用して問題を解決したいと思います。私は以下がありますが、正常に動作しないようです。

myText.replace(/(<([^>]+)>)/ig,""); 

助けていただければ幸いです。

+2

は、この範囲外だあなたは確かにあります:[(X)HTML正規表現を解析しない](http://stackoverflow.com/questions/ 1732348/regex-match-open-tags-except-xhtml-self-contained-tags#answer-1732454)? – fncomp

+1

あなたが欲しいものがあり、何が働いているのですか?あなたは本当に**ほしいですか?堅牢なソリューションでは、正規表現ではできない方法で文字列を解析する必要があります。 – RobG

+0

堅牢なソリューションを使用しても構いません。私はちょうど正規表現が行く方法だと思った。 –

答えて

1

このようなものは、仕事をするだろうが、それは、正規表現を使用しません(それはjQueryのいずれかを使用していません、2人に1人は悪くない)。

var s = '<span>A</span>BC<span id="blabla">D</span>EF'; 

function removeSpans(s) { 
    var a = document.createElement('div'); 
    var b = a.cloneNode(true); 
    a.innerHTML = s; 
    var node; 
    while (a.firstChild) { 
    node = a.removeChild(a.firstChild); 
    if (node.tagName && 
     node.tagName.toLowerCase() == 'span' && 
     node.id == '') { 
     b.appendChild(document.createTextNode(getText(node))); 
    } else { 
     b.appendChild(node); 
    } 
    } 
    return b.innerHTML; 
} 

alert(removeSpans(s)); 

それは特に堅牢ではありません(実際には私はそれが思ったよりも良い作品)と、おそらくテストケースにわずかに異なる場合に失敗します。しかしそれは戦略を示しています。ここで

は別のバージョンはしかし、かなり似ています:

function removeSpans2(s) { 
    var a = document.createElement('div'); 
    a.innerHTML = s; 
    var node, next = a.firstChild; 

    while (node = next) { 
    next = next.nextSibling 

    if (node.tagName && node.tagName.toLowerCase() == 'span' && !node.id) { 
     a.replaceChild(document.createTextNode(node.textContent || node.innerText), node); 
    } 
    } 
    return a.innerHTML; 
} 
+0

これは正しい答えです。ありがとう! –

+0

スパンがIDを持つ別のスパンの内側にあるときに失敗する理由はありますか? –

+0

はい、それは必須条件ではありませんでした。 :-)答えの警告に注意してください。 OPがネストされた要素を掘り下げたい場合、子ノードへの再帰は実装するのが難しくありません。 – RobG

3

正規表現ではなく、DOMを使用します。

var input = '<span>A</span>BC<span id="blabla">D</span>EF', 
    output, 
    tempElt = document.createElement('span'); 

tempElt.innerHTML = input; 

// http://www.quirksmode.org/dom/w3c_html.html#t03 
if (tempElt.innerText) output = tempElt.innerText; 
else output = tempElt.textContent; 

console.log(output); // "ABCDEF" 

デモ:http://jsfiddle.net/mattball/Ctrkf/


"It is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail."

+0

明らかに、このコードは_all_スパンを削除します。 IDでスパンを離れるように適応させる方法を理解するのは簡単ですが、これがどのように役立つかはわかりません。 –

+0

これにより、保持したいスパンを含むすべてのスパンが削除されます。 IDを持つものだけを保持するためにこれを変更する方法はありますか? –

+0

コメントが表示されませんでしたか?とにかく、jQueryのようなJSライブラリを使用したくない特別な理由はありますか?それはあなたの仕事をより簡単にするだけです。 –

関連する問題