2

我有以下代码:

    $.fn.addTemplateSetup(function () {
        this.find('pre').each(function (i) {
            SyntaxHighlighter.highlight({}, this);
        });
    });

它找到每个元素,然后在其上运行 SyntaxHighlighter。

在荧光笔运行之前,我想将 a 中带有一类文本的每个<pre>内容<div>更改为<pre class='brush: plain'>

我应该在第一个函数中执行此操作,我应该使用另一个 this.find 吗?

4

3 回答 3

3

试试这个:

$.fn.addTemplateSetup(function () {
    $("pre", this).addClass("brush: plain");
    this.find('pre').each(function (i) {
        SyntaxHighlighter.highlight({}, this);
    });
});

或者

$.fn.addTemplateSetup(function () {
    this.find('pre').each(function (i) {
        this.addClass("brush: plain");
        SyntaxHighlighter.highlight({}, this);
    });
});
于 2012-05-25T08:36:27.447 回答
3
$.fn.addTemplateSetup(function () {
    this.find('pre').each(function () {
        this.addClass("brush: plain");
        SyntaxHighlighter.highlight({}, this);
    });
});
于 2012-05-25T08:37:17.210 回答
0

每当您使用 $ 选择时,您都会获得一组元素,并且您对选择执行的每个操作都将在所有元素上执行。所以$("pre").addClass("myClass")会将类“myClass”添加到文档中的所有前置元素。此外,该操作会返回它自己的选择,因此您可以像这样链接操作: $("pre").addClass("myClass").css("font-weight","bolder")这将添加类并将 CSS 属性 font-weight 设置为粗体

返回值时例外。例如,当执行类似$("input").val()第一个输入元素的值的操作时,将返回

因此,在您的特定情况下,您需要选择所有前置元素添加类和突出显示

$.fn.addTemplateSetup(function () {
        this.find('pre')
            .addClass("brush: plain")
            .each(function () {
               SyntaxHighlighter.highlight({}, this);
        });
});

但是,由于您的课程看起来更像您尝试应用一些内联样式,因此我也包含了如何做到这一点

$.fn.addTemplateSetup(function () {
        this.find('pre')
            .css('brush', 'plain')
            .each(function () {
               SyntaxHighlighter.highlight({}, this);
        });
});

我把 addClass/css 放在 each 之前的原因是 addClass/css 会在它应用到的选择上调用 each。如果在 each 函数中使用 addClass ,它将在选择一个元素时调用 each ,我希望这比迭代整个集合两次要慢。在这两种情况下,每个元素的访问次数都是相同的,我会在评论中反对任何一个

于 2012-05-25T09:07:42.467 回答