是否可以删除除body标签之外没有父元素的dom元素?我知道使用像jquery这样的框架会很容易,但我试图坚持直接的javascript.
这是我发现的代码,否则:
function removeElement(parentDiv, childDiv){
if (childDiv == parentDiv) {
alert("The parent div cannot be removed.");
}
else if (document.getElementById(childDiv)) {
var child = document.getElementById(childDiv);
var parent = document.getElementById(parentDiv);
parent.removeChild(child);
}
else {
alert("Child div has already been removed or does not exist.");
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我知道如果试图通过简单的循环从集合中删除循环,我会得到这个异常:java.util.ConcurrentModificationException.但我正在使用Iterator,它仍然会产生这个异常.知道为什么以及如何解决它?
HashSet<TableRecord> tableRecords = new HashSet<>();
...
for (Iterator<TableRecord> iterator = tableRecords.iterator(); iterator.hasNext(); ) {
TableRecord record = iterator.next();
if (record.getDependency() == null) {
for (Iterator<TableRecord> dependencyIt = tableRecords.iterator(); dependencyIt.hasNext(); ) {
TableRecord dependency = dependencyIt.next(); //Here is the line which throws this exception
if (dependency.getDependency() != null && dependency.getDependency().getId().equals(record.getId())) {
tableRecords.remove(record);
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在构建一个脚本,它必须修补XML文件,包括用另一个元素替换一个元素列表.以下函数将补丁(包含可能为空的同名元素列表)应用于父元素的同名元素列表(也可能是空列表).(这只是修补逻辑的一小部分).
为什么,当我运行代码时,是否会出现以下错误?
org.w3c.dom.DOMException: NOT_FOUND_ERR: An attempt is made to reference a node in a context where it does not exist.
at com.sun.org.apache.xerces.internal.dom.ParentNode.internalRemoveChild(ParentNode.java:503)
at com.sun.org.apache.xerces.internal.dom.ParentNode.removeChild(ParentNode.java:484)
at CombineSweeps$PTReplaceNodeList.apply(CombineSweeps.java:514)
Run Code Online (Sandbox Code Playgroud)
(第514行标记如下.)据我所知,我刚刚验证了元素是否存在(因为NodeList是实时的,它的第一个条目将始终是下一个匹配或null).有趣的是,这并不总是一个问题.
private static class PTReplaceNodeList extends PTBase {
private final String name;
private final String nextElement;
private final List<Node> childList;
...
int apply(Document document, Node parent, Node node_unused) {
NodeList nodes;
// A marker for where to insert our nodes.
// We make a guess using nextElement (if null, means at end).
Node refNode …Run Code Online (Sandbox Code Playgroud) 这要么非常简单,要么不可能.
我知道我可以这样做:
var element = document.getElementById('some_element');
element.parentNode.removeChild(element);
Run Code Online (Sandbox Code Playgroud)
......但感觉很乱.是否有更整洁 - 并且普遍支持 - 的方式来做同样的事情?
似乎 - 至少对我来说 - 就像应该有这样的东西:
document.getElementById('some_element').remove();
Run Code Online (Sandbox Code Playgroud)
......但这不起作用,搜索Google/SO并没有产生任何替代方案.
我知道这并不重要,但parentNode.removeChild()只是感觉hacky/messy/lowfficient/bad practice-y.
有没有办法删除ul的li元素而不删除ul?我似乎只能找到这个.
var element = document.getElementById('myList');
element.parentNode.removeChild(element);
Run Code Online (Sandbox Code Playgroud)
但是,这删除了ul.我希望能够动态删除和附加li元素,而不必每次删除li元素时都必须创建元素.只是寻找一种更简单的方法.谢谢你的帮助.
<div id="listView">
<ul id="myList" class="myList-class">
<li>item 1</li>
<li>item 2</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud) 回答完这个问题后,我想知道为什么removeChild需要一个父元素.毕竟,我们可以做到
node.parentNode.removeChild(node);
Run Code Online (Sandbox Code Playgroud)
由于父节点应始终可直接用于Javascript/DOM引擎,因此不必提供要删除的节点的父节点.
当然我理解removeChild作为DOM节点方法的原理,但为什么不document.removeNode存在这样的东西(只接受任意节点作为参数)?
编辑:更清楚的是,问题是:为什么JS引擎根本就需要父节点,如果它已经有要删除的(唯一)节点?
removeChild函数是否真的完全删除子节点?或者它只是删除指定parant节点的子元素?如果它没有真正删除元素,有没有办法完全删除元素?
我正在建立一个灯箱作为学校项目,我不能使用jQuery.我有一张图片.当您单击它时,Javascript会生成一个透明的div,ID为"overlay".我希望div删除它自己,或者父级删除它但它不起作用.我认为这与你不能将'onclick'链接到一个尚不存在的元素这一事实有关.
我的代码大致如下(我删除了一些部分,因为它们无关紧要):
Library.focus = function(event) {
var element, paragraph;
element = event.srcElement;
paragraph = document.createElement("p");
paragraph.innerText = element.innerText;
element.parentNode.insertBefore(paragraph, element); // Line #1
element.parentNode.removeChild(element); // Line #2
};
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,我编号为第2行的最后一个调用抛出了这个:
Uncaught Error: NOT_FOUND_ERR: DOM Exception 8
Run Code Online (Sandbox Code Playgroud)
请注意,上一行#1工作正常,并在其前插入段落节点.Element是一个现有元素,element.parentNode和element.parentNode.removeChild也存在.
我发现这不合逻辑,因为元素根据定义是其parentNode的子元素.也许StackOverflow能够帮助我,在这里?
让我们考虑以下XML文档:
<items>
<item>item1</item>
<item>item2</item>
</items>
Run Code Online (Sandbox Code Playgroud)
现在,让我们删除所有项目并添加一些新项目.码:
//-- assume we have Element instance of <items> element: items_parent
// and the Document instance: doc
//-- remove all the items
NodeList items = items_parent.getElementsByTagName("item");
for (int i = 0; i < items.getLength(); i++){
Element curElement = (Element)items.item(i);
items_parent.removeChild(curElement);
}
//-- add a new one
Element new_item = doc.createElement("item");
new_item.setTextContent("item3");
items_parent.appendChild(new_item);
Run Code Online (Sandbox Code Playgroud)
文件的新内容:
<items>
<item>item3</item>
</items>
Run Code Online (Sandbox Code Playgroud)
这些恼人的空白线出现因为removeChild()除去了小孩,但是留下了被移除的小孩的缩进,并且线断裂.并且此indent_and_like_break被视为文本内容,该内容保留在文档中.
在相关问题中,我发布了变通方法:
items_parent.setTextContent("");
Run Code Online (Sandbox Code Playgroud)
它删除了这些空白行.但这是一些黑客攻击,它消除了影响,而不是原因.
所以,问题在于如何消除原因:如何以换行意图移除孩子?
removechild ×10
javascript ×7
dom ×4
java ×3
xml ×2
domexception ×1
html ×1
html-lists ×1
iterator ×1
lightbox ×1
onclick ×1