是否存在子节点的有效范围?

时间:2017-07-17 06:54:28

标签: javascript

我做了一个' p'节点并将其附加到'身体' 接下来,我更改了节点的样式,并将其从' body'中删除。它奏效了。
但是,当我在改变' body.innerHTML'之后做同样的事情时,它没有用。

控制台说,

  

未捕获的NotFoundError:无法执行' removeChild' on'节点':要删除的节点不是此节点的子节点。

为什么会这样?



<p><button onclick="func1()">Result 1</button></p>
<script>
	function func1() {
		var body = document.body;
		var p = document.createElement('p');
		p.id = 'p1';
		p.innerHTML = 'Icons made by <a href="http://www.freepik.com" title="Freepik">Freepik</a> from <a href="http://www.flaticon.com" title="Flaticon">www.flaticon.com</a> is licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a>';
		body.appendChild(p);
		p.style.color = '#0055aa';
		p.style.backgroundColor = '#ffaa00';
    
		// body.removeChild(p); // It works.
		body.innerHTML += '<p>' + p.innerHTML + '</p>';
		body.removeChild(p); // It doesn't work.
  }
</script>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:5)

您的问题是首先设置将元素添加到正文:

body.appendChild(p);

然后你要清除身体的内部HTML:

body.innerHTML += '<p>' + p.innerHTML + '</p>';

执行此操作后,您创建的p不再是正文中的节点。您创建的新<p>var p = document.createElement('p');

创建的body.removeChild(p); // It doesn't work. 不同

所以现在打电话的时候:

@Execute
public void execute(Shell shell) 
{

     shell.setLayout(new GridLayout());
        final Composite comp = new Composite(shell, SWT.NONE);
        comp.setLayout(new GridLayout());
        Text text = new Text(comp, SWT.BORDER);
        text.setMessage("Search");
        text.setToolTipText("search");
        System.out.println("i am in SearchToolItem ");


        GridData lGridData = new GridData(GridData.FILL, GridData.FILL, true, true);
        lGridData.widthHint = 200;
        text.setLayoutData(lGridData);
}

发生错误。

答案 1 :(得分:0)

以这种方式附加段落

body.innerHTML += '<p>' + p.innerHTML + '</p>';

您创建的另一个元素实例不是p,所以当您尝试以这种方式删除它时:

body.removeChild(p);

您尝试删除文档中不存在的内容。