使用jQuery移除XML注释失败求助:删除time标签时同步删除前置注释
解决jQuery处理XML注释移除无效的问题
咱们先把问题根源理清楚:你用allTagsAndComments[0]拿到的是原生DOM注释节点,而原生的Comment对象并没有自带remove()方法——这个方法是jQuery封装的专属方法,直接调用原生节点的remove()会静默失败,既不会报错也不会生效。
正确的解决思路和代码示例
方案一:把原生节点包装成jQuery对象再操作
把你拿到的原生注释节点用$()包裹,转换成jQuery对象后再执行移除:
var allTagsAndComments = $(XML.firstChild).contents(); // 将原生节点转为jQuery对象后调用remove $(allTagsAndComments[0]).remove();
方案二:用jQuery的.eq()方法直接获取目标节点(更推荐)
直接在jQuery集合上操作,避免原生DOM对象和jQuery对象混淆,代码更简洁:
var allTagsAndComments = $(XML.firstChild).contents(); // 精准获取第1个节点(jQuery集合从0开始计数)并移除 allTagsAndComments.eq(0).remove();
精准匹配并移除
如果要精准定位<!--Time -->注释和对应的<time>标签,可以结合节点类型和内容筛选:
$(XML.firstChild).contents().each(function() { // 先找到<time>元素节点 if (this.nodeType === 1 && this.tagName === 'time') { // 获取它的前一个兄弟节点 var prevComment = this.previousSibling; // 判断是否是目标注释 if (prevComment && prevComment.nodeType === 8 && prevComment.textContent.trim() === 'Time') { $(prevComment).remove(); } // 移除<time>元素本身 $(this).remove(); } });
补充:XML节点类型小知识
处理XML的contents集合时,不同节点的nodeType对应不同类型,方便我们精准筛选:
1:元素节点(比如<space>、<time>)8:注释节点(比如<!--Time -->)
内容的提问来源于stack exchange,提问作者robertpaulsen
相关产品推荐
相关产品推荐

