Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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子节点解析&;书信电报;及;燃气轮机;_Javascript_Child Nodes - Fatal编程技术网

防止Javascript子节点解析&;书信电报;及;燃气轮机;

防止Javascript子节点解析&;书信电报;及;燃气轮机;,javascript,child-nodes,Javascript,Child Nodes,我今天发现,如果我这样做: var div = document.createElement('div'); div.innerHTML = "<div>&lt; x</div>"; var node = div.firstElementChild; var childNodes = node.childNodes; console.log(childNodes[0].data); 输出为x。有更好的办法吗?因为在这种情况下,我会用正则表达式将替换为&;l

我今天发现,如果我这样做:

var div = document.createElement('div');
div.innerHTML = "<div>&lt; x</div>";
var node = div.firstElementChild;
var childNodes = node.childNodes;
console.log(childNodes[0].data);
输出为
x
。有更好的办法吗?因为在这种情况下,我会用正则表达式将
替换为
&;lt
&;燃气轮机。但是这看起来相当骇人听闻,谁知道是否有更多的属性被转义,并且现在通过
childNodes
方法进行了更改

更新/澄清:

我收到一个html字符串作为解析器的输入。例如,这可能是
世界就是空间
。然后我想为这个html编写一个解析器。我首先使用
document.createElement('div')创建一个HTMLElement。从那里我遍历dom并进行后处理。我特别想找到所有“相邻兄弟文本或br节点”。这就是我用
childNodes
迭代节点的原因,因为与
childrends
相反,它还返回文本节点。

当使用innerHTML时,它似乎可以工作

这对你有用吗

var div=document.createElement('div');
div.innerHTML=“x”;
var node=div.firstElementChild;

log(node.innerHTML)问题在于,如果该字符串表示您看到的文本,那么它就不是有效的HTML。在HTML中,文字符号AND不是写为
&
,而是写为
&<代码>&
在正确的HTML中有一个特殊的含义:它被用作HTML实体名称的一部分

解决方案是将文本与HTML标记分开处理:首先添加元素,然后设置其文本内容:

var div=document.createElement('div');
var节点=document.createElement('div');
node.textContent='x';
div.appendChild(节点);
var childNodes=node.childNodes;

console.log(childNodes[0].data)这是怎么搞砸你的解析器的?听起来好像是那个做错事的人。除非
被视为文本…?这可能需要一些上下文。改变它的不是
childNodes
。解释HTML的是
innerHTML
属性
是表示
的HTML方式,您可以将HTML标记部分从文本内容中分离出来,只需添加一个空的--created--
div
元素,然后将其
textContent
属性设置为
'x'
@Ryan是的,它的意思是文本,这就是它被转义的原因。所见即所得转义用户输入
@trincot+1不管怎样,设置文本而不是html总是比较安全的。不幸的是,这对我不起作用,因为我需要在后处理中迭代childNodes。那么为什么不迭代每个子节点并访问innerHTML属性呢?迭代就是我尝试使用
childNodes
所做的。你还有什么建议?注意:我还可以处理文本节点,这很重要,这就是为什么我选择了
childNodes
,不幸的是,我只有一个html字符串作为开始。例如,我的所见即所得返回
x
,然后我必须用它开始后处理。问题是,根据您的期望,这不是一个有效的HTML字符串,因为您希望
&
按字面意思理解,而HTML在HTML实体名称中将
&
定义为我们的特殊字符。如果所见即所得的文档声明它返回HTML,那么它就是有缺陷的当所见即所得想要表示文字
时,它将返回什么?当您输入
时,所见即所得返回
,但随后所见即所得返回的HTML是正确的。然后,问题是您希望这样解释HTML,而不是当它具有
时。然后“突然”您希望将其视为文字
。这是不一致的,因为您还应该按字面意思理解
,而您不这样做:您确实将其解释为HTML。因此,没有其他方法可以找到您尝试执行的操作中的逻辑,并将您想要解释为HTML的部分与您不想要解释为HTML的部分分开。
var div = document.createElement('div');
div.innerHTML = "<div>&amp;lt; x</div>";
var node = div.firstElementChild;
var childNodes = node.childNodes;
console.log(childNodes[0].data);