0

私は次のJSコードを持っています(問題がまだ存在する最小サイズにストリップされています)

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<div id="debug">this is <em>test</em></div>
<script type="text/javascript">
    var string1 = $('#debug').html();
    var string2 = string1.replace(/<em>/g, '<strong>');
    string2 = string2.replace(/<\/em>/g, '</strong>');
    $('#debug').html( string2 );
</script>
</body>
</html>

Firefoxではすべてが機能し、<em>タグは<strong>に置き換えられます。

しかし、Operaでは<em>はそのままです。さらに、他のHTMLタグは正規表現によってまったくキャプチャされません。

この動作を修正する方法はありますか?タグを置き換えるだけでなく、コンテンツも解析する必要があります(たとえば、href属性)。

4

3 に答える 3

3

Operaはタグを大文字で返します。例:<EM>。大文字と小文字を区別せずに機能するように正規表現を変更する必要があります。

var string2 = string1.replace(/<em>/gi, '<strong>');
string2 = string2.replace(/<\/em>/gi, '</strong>');
于 2009-12-07T15:30:13.070 に答える
1

DOMメソッドを使用できる場合は、文字列メソッドを使用しないでください。

$("#debug em").each(function() {
    var newElem = document.createElement("strong");
    for (int i=0; i<this.childNodes.length; ++i) {
        newElem.appendChild(this.childNodes[i]);
    }
    this.parentNode.replaceNode(newElem, this);
});
于 2009-12-07T15:34:25.717 に答える
0

// giですべてのHTMLタグを大文字に正規化したため、Operaでは正規表現が一致していません

ただし、さらに変更を加える場合(「コンテンツの解析」)は、正規表現を使用せずに、適切なDOM操作を行うことをお勧めします。

于 2009-12-07T15:31:51.353 に答える