JQuery селектор, который имитирует: начинается с или: заканчивается для поиска текста? - PullRequest
11 голосов
/ 09 февраля 2012

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

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

Есть ли в jQuery реализация для поиска строк, использующих начальный или конечный конец?объект XML.

Ответы [ 2 ]

16 голосов
/ 09 февраля 2012

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

Если вы не хотите расширять jQuery, вы можете использовать функцию filter() для создания функциональности содержимого:

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

Или создайте функцию StartWith с регулярным выражением:

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

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

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

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

...