2009-08-14 19 views
1

Ein Blog, den ich gelesen habe, hat einige nervige Kommentatoren. Ich dachte, ich würde meine Hand gegen Greasemonkey versuchen, sie auszuschalten.Listenelemente mit Greasemonkey entfernen

Die Grundstruktur des HTML ist einfach - ein Kommentar sieht ungefähr so ​​aus:

<li> 
    <cite>user name ...</cite> 
    comment text 
</li> 

Also mit diesem Gedanken, ich meinen Kopf gegen die Tastatur für eine Weile heftig geschlagen, bis dieser herauszufilternde:

var killlist = /user1|user2/; 

var comments = document.getElementsByTagName('li'); 

if (comments.length) { 
    for (var i = 0; i < comments.length; i ++) { 
    var comment = comments[i]; 
    var cites = comment.getElementsByTagName('cite'); 
    if (cites.length) { 
     var cite = cites[0]; 
     var title = cite.textContent; 
     if (killlist.test(title)) { 
     comment.parentNode.removeChild(comment); 
     } 
    } 
    } 
} 

window.alert('Done!') 

(die window.alert ist nur so weiß ich, ob das Skript bis zur Fertigstellung läuft)

Diese meist funktioniert. z.B. Auf einer Testseite wurden 13 von 16 Posts von einem der Benutzer entfernt. Ich habe versucht, Ersatz der removeChild Linie mit diesem:

comment.style.visibility = 'hidden'; 

, dass alles zu bekommen scheint, aber auf Kosten große leere Räume zu verlassen, in dem die Kommentare gewesen wäre.

Ich bin ein komplettes Javascript-Neuling, kann also jemand etwas offensichtliches sehen, das ich falsch mache?

Antwort

1

Sie sollten in der Lage sein, es zu beheben, indem Sie die Reihenfolge der für Schleife Wende- und Elemente aus dem Ende der Kommentare Array löschen zuerst:

for (var i = comments.length - 1; i >= 0; i--) 
+0

Ich fragte mich, ob das ein Problem sein könnte, also habe ich versucht, ein Array zu den zu löschenden Kommentaren zu machen und dann davor zu löschen, aber ohne Erfolg. Aber das sieht bisher vielversprechend aus! Ich werde etwas länger testen und dann zurückkommen. –

3

Das Verhalten Sie sehen, ist aufgrund comments ein Wesen live NodeList. Wenn Sie Elemente entfernen, auf die von comments aus dem DOM verwiesen wird, wird comments mutiert (und seine length aktualisiert) und Ihre Schleife wird aus dem Fenster.

Sie können Schleife in umgekehrter Reihenfolge wie @ Pat vorgeschlagen, oder „aushängen“ die NodeList aus dem DOM mit einem Kopiervorgang zuerst:

var comments = Array.slice(document.getElementsByTagName('li')); 

dann wie zuvor fort.