Селектор jQuery, который имитирует: start-with or: заканчивает-для поиска текста?

Если вы посмотрите на список селекторов на веб-сайте jQuery, есть селектора для запуска и завершения с атрибутами. Также существует селектор :contains для поиска текста:

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

Имеет ли jQuery реализацию для поиска строк с использованием start-with или end-with?

FYI: Мне нужно выполнить поиск через объект XML.

Ответ 1

Не по умолчанию, насколько я знаю, но вы можете добавить свои псевдоселектора через $.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;
    }
});

Ответ 2

Если вы не хотите расширять 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()));
});

Функция endWith очень похожа:

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

Обратите внимание на использование $.trim(), потому что HTML может содержать много пробелов.