jQuery选择器模拟:starts-with或:ends-with用于搜索文本?

时间:2012-02-09 15:40:35

标签: javascript jquery xml jquery-selectors contains

如果你看一下jQuery网站上的selectors list,就会有关于属性的开始 - 结束和结束的选择器。还有一个:contains选择器用于搜索文本:

alert( $("div").find("span:contains(text)").html() );

jQuery是否有使用starts-with或ends-with搜索字符串的实现?

仅供参考:我需要搜索XML对象。

2 个答案:

答案 0 :(得分:16)

据我所知,默认情况下不是,但您可以通过$.expr[":"]添加自己的伪选择器:http://jsfiddle.net/h6KYk/

$.extend($.expr[":"], {
    "starts-with": function(elem, i, data, set) {
        var text = $.trim($(elem).text()),
            term = data[3];

        // first index is 0
        return text.indexOf(term) === 0;
    },

    "ends-with": function(elem, i, data, set) {
        var text = $.trim($(elem).text()),
            term = data[3];

        // last index is last possible
        return text.lastIndexOf(term) === text.length - term.length;
    }
});

答案 1 :(得分:13)

如果您不想扩展jQuery,可以使用filter()函数创建包含功能:

$("div").find("span").filter(function () {
    return $(this).text().indexOf(text) >= 0;
});

或者使用正则表达式创建一个startsWith函数:

var expression = new RegExp('^' + text);
$("div").find("span").filter(function () {
    return expression.test($.trim($(this).text()));
});

endsWith函数非常相似:

var expression = new RegExp(text + '$');
$("div").find("span").filter(function () {
    return expression.test($.trim($(this).text()));
});

请注意$.trim()的使用,因为HTML可以包含很多空格。