Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.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 如何删除不在HTML元素中的字符?_Javascript_Html - Fatal编程技术网

Javascript 如何删除不在HTML元素中的字符?

Javascript 如何删除不在HTML元素中的字符?,javascript,html,Javascript,Html,我知道如何删除或操作HTML元素中的字符串,但如果它位于HTML元素之外,我将如何执行该操作。我正在尝试删除(|)字符,但不确定如何使用javascript执行此操作 <html> <body> <p>Hello</p> | <p>World</p> | <p>!</p> </body> 你好 | 世界 | ! 您可以与和结合使用 只读Nod

我知道如何删除或操作HTML元素中的字符串,但如果它位于HTML元素之外,我将如何执行该操作。我正在尝试删除(|)字符,但不确定如何使用javascript执行此操作

<html>

<body>
    <p>Hello</p>
    |
    <p>World</p>
    |
    <p>!</p>
</body>

你好

| 世界

| !

您可以与和结合使用

只读Node.nodeType属性返回表示节点类型的无符号短整数

$(文档).ready(函数(){
$('div').contents().filter(函数(){
返回this.nodeType==Node.TEXT_Node&&this.textContent.trim();
}).remove();
});

你好

| 世界

| !


这里有一个普通的JavaScript递归解决方案,可以删除“普通”节点之外的所有文本。我指的是不在以下标记内的文本:

[ "a", "p", "script", "span", "b", "em", "strong", "i" ]
通常只有文本节点作为子节点

//这些元素只能有文本节点
var-okayTypes=[“a”、“p”、“script”、“span”、“b”、“em”、“strong”、“i”]
var removeAllText=函数(节点){
//如果节点类型为3(文本节点),节点名称为“#文本”
if(node.nodeName==“#text”){
node.parentNode.removeChild(节点);
}else if(node.childNodes){
对于(var i=node.childNodes.length;i--;){
//如果子元素不允许纯文本节点,则在其上递归
if(okayTypes.indexOf(字符串(node.childNodes[i].tagName).toLowerCase())=-1)
removeAllText(node.childNodes[i]);
}
}
}
removeAllText(document.body)

不要拆下1

移除1 不要拆下2个

移除2 不要拆下3个


使用
innerHTML
和文本替换可能是最简单的方法,但这非常缓慢,而且非常糟糕。
确实有一些库可以满足您的需要,但我不喜欢为这么简单的任务需要大量的库。
下面是一种纯JavaScript方式:

文本节点在添加、删除和更改包含的文本方面与元素节点类似。
您可以通过
document.body.firstElementChild.nextSibling
获取第一个“|”,然后可以将其从其父级中删除或像普通一样编辑其内容:

var textNode1 = document.body.firstElementChild.nextSibling;
var textNode2 = textNode1.nextSibling.nextSibling;
// Remove the first text node
textNode1.parentNode.removeChild(textNode1);
// Replace the second by something else
textNode2.textContent = 'Derp';
[]

如果需要,还可以通过检查
.nodeType
,检查节点是文本节点还是其他节点:

for(var i = 0; i < document.body.childNodes.length; i++)
{
    if(document.body.childNodes[i].nodeType == 3) // "3" means text node
    {
        document.body.removeChild(document.body.childNodes[i]);
    }
}
for(var i=0;i
.nodeType
的可能值及其含义列在,或者。

在本例中,只需在正在检查的节点的上迭代,然后删除遇到的每个文本节点

var root=document.body;
[]forEach.call(root.childNodes,函数(node){
if(node.nodeType==3){
root.removeChild(节点);
}
});

你好

| 世界

| !