Есть ли текстовый селектор в jquery? - PullRequest
1 голос
/ 17 октября 2010

Есть ли текстовый селектор в jquery?

Мой код

<anything>Hello World! Hello World!</anything>

Reslut должен быть (с помощью Jquery)

<anything>Hello <span>World</span>! Hello <span>World</span>!</anything>

Ответы [ 3 ]

2 голосов
/ 17 октября 2010

Нет. jQuery работает в основном с элементами и дает вам очень мало для обработки текста.

Чтобы выполнить поиск и замену текста, вам необходимо проверить каждый текстовый узел отдельно и выполнить операции DOM splitText, чтобы разобрать его при обнаружении совпадения. Например:

function findText(element, pattern, callback) {
    for (var childi= element.childNodes.length; childi-->0;) {
        var child= element.childNodes[childi];
        if (child.nodeType==1) {
            var tag= child.tagName.toLowerCase();
            if (tag!=='script' && tag!=='style' && tag!=='textarea')
                findText(child, pattern, callback);
        } else if (child.nodeType==3) {
            var matches= [];
            var match;
            while (match= pattern.exec(child.data))
                matches.push(match);
            for (var i= matches.length; i-->0;)
                callback.call(window, child, matches[i]);
        }
    }
}

findText(element, /\bWorld\b/g, function(node, match) {
    var span= document.createElement('span');
    node.splitText(match.index+match[0].length);
    span.appendChild(node.splitText(match.index));
    node.parentNode.insertBefore(span, node.nextSibling);
});
1 голос
/ 17 октября 2010
$('anything').html(function(i, v) {
    return v.replace(/(World)/g, '<span>$1</span>');
});  

Приведенный выше фрагмент использует функциональность, добавленную в jQuery 1.4.

Примечание: это решение безопасно для элементов, содержащих только необработанный текст (и не дочерних элементов).

1 голос
/ 17 октября 2010

Вы можете сделать замену регулярных выражений и т. Д. Для вашего простого случая, но для более общего ответа: нет .

jQuery не очень помогает при работе с текстовыми узлами, он в основном предназначен для работы с типами узлов элементов (nodeType == 1), а не с типами текстовых узлов (nodeType == 3) ... так что да, выего можно использовать , где это помогает (например, .contents() и .filter()), но это не часто, поскольку это не является основной целью библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...