0

Web サービスを使用して、チケット発行インターフェイスを照会し、任意の時点で開いているすべてのサポート チケットを引き出して、Web アプリケーションの一部として iframe 内のきれいなテーブルに表示します。私のアプリケーションは PL/SQL で書かれていますが、これを使用して HTML ページと iframe 内に表示されるコンテンツを作成しています。私の主な問題は、チケットが電子メールのコンテンツで構成されているため、電子メールのコンテンツの上部に不要なゴミ (主にタグ) と無関係なテキストが含まれているため、インターフェイスがごちゃごちゃに見えることです。

コード内で、必要なコンテンツの主要領域を「ticketsTable」の ID を持つテーブルにラップしており、このチケット テーブルの前に発生する 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 の内容はそのままにしておく必要があることを強調しなければなりません。削除したいのは、体内でこれより前に発生するコンテンツのみです。

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++;
    }
}

子ノードを削除すると配列がシフトされるため、たとえば最初の 2 つのノードを削除する必要がある場合は、インデックス 0 に対して removeChild を 2 回呼び出します。

于 2013-08-28T10:08:24.213 に答える