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>

该脚本运行良好,除了一件事......我不需要替换[tabulaScriptum=][/tabulaScriptum]某些元素。例如,我不想替换具有类 .code-box 的元素中的那些“标签”。可能吗?

澄清:元素 .code-box 位于 .post-content 中。

澄清 #2:这个脚本创建了简单的除法剧透。.tabulaScriptum是剧透的正文,是剧透的.tabulaNomen名称和按钮,依次.tabulaImpleo在点击时显示(或隐藏)。Reveal\hide script 位于其他地方,我没有在这里发布它,因为它并不重要。

澄清#3:http: //jsfiddle.net/PRtsw/1/fiddle

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这使问题变得更加有趣!我很想看看比我更聪明的人如何处理这个问题。

我想到的一种解决方案是采用两遍方法。

首先按照你实现它的方式进行更改,然后返回并反转.code-boxdiv 的替换。

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 回答