Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery中有文本选择器吗?_Javascript_Jquery_Html_Text_Jquery Selectors - Fatal编程技术网

Javascript jquery中有文本选择器吗?

Javascript jquery中有文本选择器吗?,javascript,jquery,html,text,jquery-selectors,Javascript,Jquery,Html,Text,Jquery Selectors,jquery中有文本选择器吗 我的代码 <anything>Hello World! Hello World!</anything> 你好,世界!你好,世界! Reslut应该是(使用Jquery) 你好,世界!你好,世界! 对于您的简单案例,您可以执行正则表达式替换等操作,但对于更一般的回答:否 jQuery在处理文本节点时没有提供太多帮助,它主要用于处理元素节点类型(nodeType==1),而不是文本节点类型(nodeType==3)…因此,可以在有帮助的地方使

jquery中有文本选择器吗

我的代码

<anything>Hello World! Hello World!</anything>
你好,世界!你好,世界!
Reslut应该是(使用Jquery)

你好,世界!你好,世界!

对于您的简单案例,您可以执行正则表达式替换等操作,但对于更一般的回答:


jQuery在处理文本节点时没有提供太多帮助,它主要用于处理元素节点类型(
nodeType==1
),而不是文本节点类型(
nodeType==3
)…因此,可以在有帮助的地方使用它(例如和),但这并不常见,因为这不是库的主要用途。

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

$('anything').html(function(i, v) {
    return v.replace(/(World)/g, '<span>$1</span>');
});  
jQuery在处理文本节点时没有提供太多帮助,它主要用于处理元素节点类型(
nodeType==1
),而不是文本节点类型(
nodeType==3
)……因此您可以在有帮助的地方使用它(例如和),但这并不常见,因为它不是库的主要用途。

$('anything').html(函数(i,v){
$('anything').html(function(i, v) {
    return v.replace(/(World)/g, '<span>$1</span>');
});  
返回v.替换(/(世界)/g,$1'); });
上面的代码段使用jQuery 1.4中添加的功能

注意:此解决方案对于只包含原始文本(而不包含子元素)的元素是安全的。

$('anything').html(函数(i,v){
返回v.替换(/(世界)/g,$1');
});  
上面的代码段使用jQuery 1.4中添加的功能


注意:此解决方案对于只包含原始文本(而不包含子元素)的元素是安全的。

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

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

否。部分文本节点不是有效的DOM元素。请检查Nope。部分文本节点不是有效的DOM元素。请检查键入:
noteType
应为
nodeType
Typo:
noteType
应为
nodeType
@bobince Good catch。html()代替text()方法必须使用…但是,现在我们必须小心,regexp不会破坏innerHMTL stringYes(哦!我移动了注释)中的标记。上面的内容很危险,因为它会很好地匹配非文本内容。而且对于一般字符串来说,它是不可靠的,因为浏览器决定HTML转义哪些字符(字母
World
没有问题,但其他字符串也可能有问题)。它还销毁并重新创建所有包含的元素,这将清除任何不可序列化的属性,如表单值或事件处理程序。它使用正则表达式攻击HTML,对于一个只包含文本的简单元素,您可能会侥幸逃脱,但所有常见的问题都潜伏在那里。我选择删除我的答案,因为所有这些都是必需的可能是错误的。@bobince是的,我的解决方案只适用于纯文本字符串。因此,这是一个有限的解决方案。但是,如果OP的情况是只处理原始文本,那么他应该没事。我个人更喜欢更精细的解决方案(如您提出的解决方案).的确如此。我想澄清这一点,这样下一个谷歌搜索者就不会在更复杂的情况下开始使用
html()
替换,比如在包含子元素内容的元素上。不幸的是,这是一种常见的做法,并且在这种情况下经常会导致错误和安全漏洞。@bobince Good catch.而不是text(),必须使用html()方法…但是,现在我们必须小心,regexp不会破坏innerHMTL stringYes(哎呀!我移动了注释)中的标记。上述情况是危险的,因为它会很好地匹配非文本内容。而且,对于一般字符串来说,它是不可靠的,因为浏览器决定html转义哪些字符(字母
World
没有问题,但其他字符串也可能有问题)。它还销毁并重新创建所有包含的元素,这将清除任何不可序列化的属性,如表单值或事件处理程序。它使用正则表达式攻击HTML,对于一个只包含文本的简单元素,您可能会侥幸逃脱,但所有常见的问题都潜伏在那里。我选择删除我的答案,因为所有这些都是必需的可能是错误的。@bobince是的,我的解决方案只适用于纯文本字符串。因此,这是一个有限的解决方案。但是,如果OP的情况是只处理原始文本,那么他应该没事。我个人更喜欢更精细的解决方案(如您提出的解决方案)确实如此。我想澄清这一点,这样下一个谷歌人就不会出现并开始使用
html()
在更复杂的情况下进行替换,例如在包含子元素内容的元素上进行替换。不幸的是,这通常会发生,并且在这种情况下会导致错误和安全漏洞。我建议在if、for和while等复合语句中使用块。我建议在if、for和while等复合语句中使用块。