我做了一个' 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;
答案 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);
您尝试删除文档中不存在的内容。