2011-07-02 9 views
0
r = r.replace(/<TR><TD><\/TD><\/TR>/gi, rider_html); 

... IEでは動作しませんが、他のすべてのブラウザで動作します。IEのJavaScript正規表現の置き換え

アイデアや代替品はありますか?

+1

' ? – alex

+1

*「IEでは動作しません」とはどういう意味ですか?正確に「うまくいかない」とは何ですか? **ブラウザで正規表現を使用してHTMLを処理すると、奇妙なようです。なぜHTMLをDOMに変換しないのですか?それはブラウザで超簡単です... –

+0

[正規表現で(X)HTMLを解析することはできません](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained - タグ/ 1732454#1732454)。そして、それをブラウザで行うのは意味がありません。 DOM(または、例えばjQueryの提供するラッパー)を使用してください。 – You

答えて

0

私は結論には、実際に一致が存在する場合、正規表現置換が正常に動作するはずであるため、変数rには値が入ってはいけません。 this jsFiddleには、 "r"が実際に一致していれば、置換が正常に機能することが分かります。

これはfiddleのコードで、IEでの適切な置き換えを示しています。

var r = "aa<TR><TD></TD></TR>bb"; 
var rider_html = " foo "; 

r = r.replace(/<TR><TD><\/TD><\/TR>/gi, rider_html); 
alert(r); 

だから、私たちは本当に「R」の値が何であるかを知らずに診断するために、さらに行くことができないと、どこから来たのか、あなたは(で実行しているIEのバージョンについてのより具体的な何かを知っていますその場合は、自分でそのバージョンのフィドルを試すことができます)。

rがドキュメントのHTMLから来た場合、IEはオリジナルのHTMLを保持しないため、文字列マッチングは悪いことです。代わりに、解析されたページから必要なときにそれを再構成し、属性(属性など)の異なる順番でいくつかのものを入れたり、属性や異なる大文字、異なるスペーシングなどを引用符で囲みません。

+0

'innerHTML'でテーブル構造を追加すべきではありません。 – lonesomeday

+0

ええ、私は通常、多くの理由でテーブルを使用しません。とにかくDOM操作ではなく、元の投稿が文字列操作を表示するだけなので、別の方向に投稿を編集しました。 – jfriend00

0

あなたはこのような何かを行うことができ:これはむしろ、行全体を交換するよりも、テーブルセルの値を設定することを

var rows = document.getElementsByTagName('tr'); 
for (var i = 0; i < rows.length; i++) { 
    var children = rows[i].children; 
    if (children.length === 1 && children[0].nodeName.toLowerCase() === 'td') { 
     children[0].innerHTML = someHTMLdata 
    } 
} 

注意を。これ以外のものをしたいのであれば、innerHTMLではなくDOMメソッドを使用し、実際に何をしたいかを指定する必要があります。

関連する問題