jquery中有文本选择器吗?

发布于 2024-09-28 04:11:56 字数 281 浏览 3 评论 0原文

jquery 中有文本选择器吗?

我的代码

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

结果应该是(使用 Jquery)

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

Are there any text selector in jquery ?

My Code

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

Reslut Should be (Using Jquery)

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

森林散布 2024-10-05 04:11:56

不会。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);
});

No. jQuery works primarily with elements and gives you very little for handling text.

To do a find-and-replace on text you will need to check each text node separately and do DOM splitText operations to take it apart when a match is found. For example:

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);
});
故人如初 2024-10-05 04:11:56
$('anything').html(function(i, v) {
    return v.replace(/(World)/g, '<span>$1</span>');
});  

上面的代码片段使用了 jQuery 1.4 中添加的功能。

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

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

The above snippet uses functionality added in jQuery 1.4.

Note: this solution is safe for elements containing only raw text (and no child elements).

浅语花开 2024-10-05 04:11:56

您可以针对简单的情况进行正则表达式替换等,但对于更一般的答案:

jQuery 在处理文本节点时并没有提供太多帮助,它主要是为处理元素节点类型 (nodeType == 1) 而设计的,而不是文本节点类型 (nodeType == 3< /code>)...所以是的,您可以在有帮助的地方使用它(例如< code>.contents().filter() ),但这种情况不会经常发生,因为这不是图书馆的主要目的。

You can do a regex replacement, etc for your simple case, but for a more general answer: no.

jQuery just doesn't provide much help when dealing with text nodes, it's designed primarily for dealing with element node types (nodeType == 1), not text node types (nodeType == 3)...so yes you can use it where it helps (e.g. .contents() and .filter()), but that won't be often since it's not the library's main purpose.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文