使用jquery在注释标记之间选择文本

时间:2012-03-27 23:36:36

标签: jquery jquery-selectors

尝试了几种方法,为两个Text内容提供了不同的注释块之间的类名。

<a>
<!--:en-->Text1<!--:-->
<!--:fr-->Text2<!--:-->
</a>

我发现最接近的解决方案是,我认为 Jquery Next Adjacent Selector 并尝试使用 jQuery('prev + next')功能,但所有示例都是定位html元素,如;

$("label + input").addClass("classone");

我找不到一种方法来选择评论块之后的文字。

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用this one等评论插件。

答案 1 :(得分:1)

我不确定它有多快,但你可以检查正文中的所有代码并替换那些预定义的类。如果您对<a>这样的特定标记感兴趣,可能更快。这将是我的方法。

var classes = {en:'classEN',fr:'classFR'};
// predefined class pairs
$('body').children().each(function() {
    var html = $(this).html();
    // grabs all the html code. then finds and replaces:
    html = html.replace(/<!--\s*:(\w+)(.*?)-->(.*?)<!--\s*:\s*-->/gi, function() {
        var lang = arguments[1].toLowerCase();
        // this catches the first parenthesized group that consists
        // of letters (after the colon) and converts it into lowercase
        if (!classes[lang]) return arguments[0];
        // returns the original if no match if found in the classes object
        var comment = '';
        if (!/^\s*$/.test(arguments[2])) comment = '<!--' + arguments[2] + '-->';
        // if you have a comment like <!--:en This is English-->
        // it keeps the comment as <!-- This is English --> and...
        return comment + '<span class="' + classes[lang] + '">' + arguments[3] + '</span>';
        // returns the result
    });
    $(this).html(html);
    // finally reassigns the modified result to each child
});