2

私は現在、Greasemonkey のこのスクリプトに取り組んでいます。このスクリプトの目的は、Web サイト MeetMe.com のフィードで特定のユーザーからの投稿を削除することです。
私のコードは次のとおりです。

// ==UserScript==
// @name        PostBeGone
// @namespace   TestingNameSpace
// @include     http://www.meetme.com/apps/home
// @version     1
// ==/UserScript==
var posterId;
var blacklist = new Array();
var toDelete;
blacklist [0] = 45112400; //These are just random peoples' user Id's that I am
blacklist [1] = 9649820;  //using to test this script
blacklist [2] = 55907221;
blacklist [3] = 56788411;
window.onload = function checkAndRemove () {
    var children = document.getElementById('feedReloadArea').childnodes;
    alert(children); //alert says "undefined"
    i = 0;
    While (i < children.length) 
    {
        posterId = children[i].getAttribute('data-poster');
        toDelete = null;

        i2 = 0;
        while (i2 < blacklist.length)
        {
            if (posterId == blacklist[i2])
            {
                toDelete = children[i];
                break;
            }
            i2++;
        }
        if (toDelete != null)
        {
            toDelete.parentNode.removeChild(toDelete);
        }
        i++;
    }
}

alert(children)複数の実行でさまざまなアラートを使用すると、 が返されるポイントまでコードが実行されることがわかりundefinedます。

スクリプトを作成する前にwindow.onload =、Google とこの Web サイトで回答を探していたところ、ページが読み込まれる前にスクリプトが実行しようとしていることが問題である可能性があるという多くの場所を読んだので、window.onload =. しかし、問題は解決せず、それを理解するのに十分なほど類似した質問を見つけることができませんでした。

要素の HTML コードを表示するために、Firefox の「Inspect Element」機能を使用しています。役立つ可能性のあるページ上の HTML コードのスニペットは次のとおりです。

<div id="feedReloadArea" style="display: block;">  
     <div class="feedItemArea feedSpotlightHighlight" data-comment-maintenance="0" data-created-at="1360098729.05091" data-numeric-reference-id="" data-reference-uuid="0d76957f-2f64-4654-99ea-f67974116b32" data-entity="StatusUpdate" data-poster="59538173" data-uuid="b9e85465-5b91-4b5c-a443-c4e37d716481"></div><div class="feedItemArea" data-comment-maintenance="0" data-created-at="1360103761.624714" data-numeric-reference-id="" data-reference-uuid="c2c201ca-a391-4fff-aec2-9823a3e90815" data-entity="StatusUpdate" data-poster="45508368" data-uuid="11149a32-38cf-4919-b081-0bd39bdc49eb"></div>
     <div class="feedItemArea" data-comment-maintenance="0" data-created-at="1360103737.756343" data-numeric-reference-id="" data-reference-uuid="997824a2-994c-467f-bfbe-aa4beb1e402f" data-entity="StatusUpdate" data-poster="38033716" data-uuid="bc075882-771c-4ee2-ad28-dbf21fbf3bd3"></div>  

明確にするために、これは HTML コードの一部にすぎません。それぞれが 1 人のユーザーの投稿を表すため、フィードにはこれらのクラスが多数あります。また、各クラスには、ユーザーのリンクやユーザーのプロフィール写真などのために複数のクラスがあります。ただし、ブラックリストにあるものと同じポスター ID を持つ完全な feedItemArea クラスを削除したいと考えています。

簡単にサポートできるように、明確かつ簡潔に説明したことを願っていますが、他の情報が必要な場合はお知らせください。投稿します。children私の質問は、何が原因undefinedですか? 前もって感謝します。

4

2 に答える 2

1

childNodesJavaScriptでは大文字と小文字が区別され、 childnodes. ところで、おそらく要素ノードのみを反復したいので (テキスト ノード、コメントなどはありません)、childrencollectionを使用します。window.onloadまた、 GreaseMonkey スクリプトはデフォルトで DOMreadyで実行されるため、ほとんど必要ありません。

于 2013-02-05T23:28:27.307 に答える
1

大文字!

var children = document.getElementById('feedReloadArea').child nノード;
于 2013-02-05T23:29:06.370 に答える