0

我正在使用 Web 服务来查询票务界面并撤回在任何时间点打开的所有支持票证,并将它们显示在 iframe 内一个漂亮整洁的表格中,作为我们 Web 应用程序的一部分。我的应用程序是用 PL/SQL 编写的,但是我使用它来构建我的 HTML 页面和在我的 iframe 中显示的内容。我的主要问题是,由于工单由电子邮件内容组成,电子邮件内容顶部包含很多无用的垃圾(主要是标签)和不相关的文本,这导致我的界面看起来很垃圾。

在我的代码中,我将我需要的主要内容区域包装在一个 ID 为“ticketsTable”的表中,并希望删除 iframe 中仅出现在该票表之前的任何元素或内容。

通常我会使用 jQuery 来完成这个任务:

$("#earliercontent").nextUntil("#ticketsTable").andSelf().remove();

但是,我们的系统是使用 ExtJS 构建的,因此我们希望避免 jQuery 库可能与此环境造成的任何潜在冲突。因此,我需要一种方法来处理和循环 iframe 的内容,删除出现在 ticketTable id 之前的所有元素和文本,从而消除所有不必要的内容。

我已经尝试过这个:

var last = null;
var curr = $('#page1');
while (curr.attr('id') != 'ticketsTable') {
    if (last != null) {
        last.remove();
    }
    last = curr;
    curr = curr.next();
}
if (last != null) {
    last.remove();
}

来源:jQuery 删除所有元素,直到找到 id='whatever'

但是,由于电子邮件内容是可变的,因此我无法为脚本开始指定特定的 ID 标签。因此,有没有我可以使用的替代方法(没有库,只是纯 JavaScript)来删除 ticketTable 之前的所有元素和内容?

我必须强调,ticketsTable 的内容必须保持不变。我希望删除的只是正文中在此之前出现的内容。

4

1 回答 1

1

http://jsfiddle.net/yJrb7/

var parent = document.getElementById("parent");
var stopID = "stop";
var length = parent.childNodes.length, j = 0;
for(var i=0; i < length; i++){
    if(parent.childNodes[j].id != stopID){
        parent.removeChild(parent.childNodes[j]);
    }
    else{
        j++;
    }
}

当你删除一个子节点时,数组会被移动,所以如果你需要删除两个第一个节点,那么你会为索引 0 调用 removeChild 两次。

于 2013-08-28T10:08:24.213 回答