0
<script language="javascript">
    $("div.post-content , .parsedsig").each(function(){
        if($(this).html().indexOf("[/tabulaScriptum]") != -1) {
             pattern = /\[tabulaScriptum=(.*?)\]([^\[]*)\[\/tabulaScriptum\]/gi
             $(this).html($(this).html().replace(pattern, "<div class='tabulaScriptum'><div class='tabulaNomen'>$1</div><div class='tabulaImpleo'>$2</div></div>")) 
        }
    });
</script>

このスクリプトは、1つのことを除いて、完全に機能しています...[tabulaScriptum=][/tabulaScriptum]特定の要素を置き換える必要はありません。たとえば、クラス.code-boxを持つ要素の「タグ」を置き換えたくありません。出来ますか?

明確化:要素.code-boxは.post-content内にあります。

明確化#2:このスクリプトは単純な除算スポイラーを作成します。.tabulaScriptumはスポイアーの体で.tabulaNomenあり、スポイラーの名前とボタンであり、クリックすると表示(または非表示).tabulaImpleoします。Reveal \ hiddenスクリプトは別の場所にありますが、実際には問題ではないため、ここには投稿しませんでした。

明確化#3: http: //jsfiddle.net/PRtsw/1/フィドル。

4

1 に答える 1

0

これを行うにはいくつかの方法があります。最初に頭に浮かぶのは、jQueryの.not(selector)メソッドを使用することです。

http://jsfiddle.net/nate/2hNEA/

$( "div.post-content、.parsedsig")。not('。code-box')。each(function(){...});

アップデート#1

私がこの回答を提出した後.code-box、の子である説明が来ました。.post-contentそれは問題をもっと面白くします!私よりも賢い頭がこれにどのように対処するかを見たいと思います。

私が思いついた解決策の1つは、2パスアプローチを採用することです。

最初に、実装したとおりに変更を加えてから、戻ってdivの置換を元に戻し.code-boxます。

http://jsfiddle.net/nate/2hNEA/1/

$("div.post-content .code-box .tabulaScriptum").each(function () {
    var $this = $(this);
    $this.before('[tabulaScriptum=]' + $this.text() + '[/tabulascriptum]');
    $this.remove();
});

これが最善の方法かどうかはわかりませんが、うまくいくようです。

アップデート#2:

別の簡単な方法は次のとおりです。

フィドル: http: //jsfiddle.net/nate/2hNEA/2/

.code-boxより大きな検索/置換を行う前に、要素内のtabulaScriptumテキストを認識できないようにレンダリングするだけです。終了したら、それらを復元します。

// Temporarily render .code-box contained tabulas unrecognizable
$('.code-box').each(function () {
    var pattern = /\[tabula/gi;
        $(this).html($(this).html().replace(pattern, "[placeholder"));
});

// Search / Replace, as before...

// Restore .code-box contained tabulas
$('.code-box').each(function () {
    var pattern = /\[placeholder/gi;
        $(this).html($(this).html().replace(pattern, "[tabula"));
});​

アップデート#3:

フィドルを含めてくれてありがとう!これが私の最後の解決策を備えたあなたの例です。

http://jsfiddle.net/nate/PRtsw/2/

于 2012-09-11T14:26:27.940 に答える