r = r.replace(/<TR><TD><\/TD><\/TR>/gi, rider_html);
... IEでは動作しませんが、他のすべてのブラウザで動作します。IEのJavaScript正規表現の置き換え
アイデアや代替品はありますか?
r = r.replace(/<TR><TD><\/TD><\/TR>/gi, rider_html);
... IEでは動作しませんが、他のすべてのブラウザで動作します。IEのJavaScript正規表現の置き換え
アイデアや代替品はありますか?
私は結論には、実際に一致が存在する場合、正規表現置換が正常に動作するはずであるため、変数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を保持しないため、文字列マッチングは悪いことです。代わりに、解析されたページから必要なときにそれを再構成し、属性(属性など)の異なる順番でいくつかのものを入れたり、属性や異なる大文字、異なるスペーシングなどを引用符で囲みません。
'innerHTML'でテーブル構造を追加すべきではありません。 – lonesomeday
ええ、私は通常、多くの理由でテーブルを使用しません。とにかくDOM操作ではなく、元の投稿が文字列操作を表示するだけなので、別の方向に投稿を編集しました。 – jfriend00
あなたはこのような何かを行うことができ:これはむしろ、行全体を交換するよりも、テーブルセルの値を設定することを
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メソッドを使用し、実際に何をしたいかを指定する必要があります。
' ? – alex
*「IEでは動作しません」とはどういう意味ですか?正確に「うまくいかない」とは何ですか? **ブラウザで正規表現を使用してHTMLを処理すると、奇妙なようです。なぜHTMLをDOMに変換しないのですか?それはブラウザで超簡単です... –
[正規表現で(X)HTMLを解析することはできません](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained - タグ/ 1732454#1732454)。そして、それをブラウザで行うのは意味がありません。 DOM(または、例えばjQueryの提供するラッパー)を使用してください。 – You