jquery中有任何文本选择器吗?

时间:2010-10-17 11:56:27

标签: javascript jquery html text jquery-selectors

jquery中是否有文本选择器?

我的代码

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

Reslut应该是(使用Jquery)

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

3 个答案:

答案 0 :(得分:2)

没有。 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 :(得分:1)

您可以为您的简单案例进行正则表达式替换等,但需要更一般的答案:

jQuery在处理文本节点时没有提供太多帮助,它主要用于处理元素节点类型(nodeType == 1),而不是文本节点类型(nodeType == 3)...所以是的你可以使用它它有帮助(例如.contents().filter()),但这不会经常,因为它不是图书馆的主要目的。

答案 2 :(得分:1)

$('anything').html(function(i, v) {
    return v.replace(/(World)/g, '<span>$1</span>');
});  

以上代码段使用jQuery 1.4中添加的功能。

注意: 此解决方案对于仅包含原始文本(且没有子元素)的元素是安全的。