2017-01-06 19 views
0

スタイルやクラスの属性を含んでも含まなくてもよいdivタグを表す文字列のテキストを置き換えたいと思います。regexを使ってタグ間のテキストを置き換える方法

str = str.replace(/<div>[\s\S]*?<\/div>/, '<div>' + newText+ '<\/div>'); 

しかし、私は考慮に属性を取るかどのように:それはちょうどタグであれば例えば、

var s = "<div style='xxx' class='xxx'>replaceThisText<div> 

は、私はちょうどこれを行うことができます信じますか?

+0

次に '.innerHTMLを変更DOM要素にそれを解析'または' .textContent'です。 –

+1

[有名なStackOverflow答えへの義務的なリンク](http://stackoverflow.com/a/1732454/1954610) –

答えて

2

一時的な要素をHTMLコンテンツとして生成し、コンテンツを更新した後にdivを取得してコンテンツを更新した後、一時的な要素のHTMLを取得します。 regexでないのはなぜ

var s = "<div style='xxx' class='xxx'>replaceThisText<div>"; 
 

 
// create a temporary div element 
 
var temp = document.createElement('div'); 
 

 
// set content as string 
 
temp.innerHTML = s; 
 

 
// get div within the temporary element 
 
// and update the content within the div 
 
temp.querySelector('div').innerHTML = 'newText'; 
 

 
// get back the current HTML content in the 
 
// temporary div element 
 
console.log(temp.innerHTML)

RegEx match open tags except XHTML self-contained tags

Using regular expressions to parse HTML: why not?

+0

'querySelector'以外の' temp.firstChild.innerHTML = 'newText'はどうでしょうか? –

+0

@SpencerWieczorek:コンテンツに先行する空白やテキストがない場合はうまくいきます。そうでなければ、textNode –

0

正規表現はHTMLコンテンツを解析するには良い決断になることはありません。
compatibility tableを参照して、DOMParser実装をサポートするブラウザ用)DOMParserオブジェクトを使用して、次の短い溶液を考える:

var s = "<div style='xxx' class='xxx'>replaceThisText<div>", 
 
    tag = (new DOMParser()).parseFromString(s, 'text/html').querySelector('.xxx'); 
 

 
tag.textContent = 'newText'; // replacing with a new text 
 
console.log(tag.outerHTML); // outputs the initial tag representation with replaced content

https://developer.mozilla.org/ru/docs/Web/API/DOMParser

関連する問題