[Userscript] innerhtml von Elterntags auf '' setzen, wenn der Inhalt ein bestimmtes Wort enthält

OP #5294822
Lesenswert?
• ▲
▼
Wie würde ein Code aussehen, der nach einem bestimmten Wort, etwa 
"einheitlich" auf der aktuellen Internetseite sucht, dann den Inhalt des 
umschließenden Tags löscht?

Also etwa
1
<div>
2
<div>
3
test einheitlich ist
4
</div>
5
</div>
6
<p>
7
Hallo
8
</p>

wird zu
1
<div>
2
<div>
3
</div>
4
</div>
5
<p>
6
Hallo
7
</p>

Anders gesagt, innerText oder innerHTML des beinhaltenden Tags wird '' 
gesetzt.

Nur wie finde ich genau die "Eltern"-Tags, welche direkt den Text 
beinhalten?
Beitrag #5296310 wurde von einem Moderator gelöscht.
Beitrag #5296541 wurde von einem Moderator gelöscht.
Gast #5296862
Lesenswert?
• ▲
▼
Wenn ein Tag den Text enthält, dann versuche ihn aus allen Kindern zu 
entfernen. Enthält er den Text immernoch, dann enthält der Tag einen 
Teil des Textes auf oberster Ebene und sollte geleert werden.
1
function test(node, str)
2
{
3
   if(node != null && node.textContent.includes(str))
4
   {
5
      for(var k = 0; k < node.childNodes.length; ++k)
6
      {
7
         test(node.childNodes[k], str);
8
      }
9
      if(node.textContent.includes(str))
10
      {
11
         node.innerHTML = '';
12
      }
13
   }
14
}

test(document.body, 'einheitlich');

Für Spezialfälle wie
<div>er<div>erhältlich</div>hältlich</div>
muss man sich etwas anderes einfallen lassen.
#5299506
Lesenswert?
• ▲
▼
Ich würde einfach jede text-node von jedem Element in document.all 
prüfen:
1
function clearTagsWithText(text){
2
  Array.prototype.slice.call(document.all).forEach(function(tag){
3
    if(Array.prototype.slice.call(tag.childNodes).filter(function(child){
4
      return child.nodeType == Node.TEXT_NODE && child.nodeValue.indexOf(text) != -1;
5
    }).length){
6
      tag.innerHTML = '';
7
    }
8
  });
9
}
Beitrag #5299507 wurde von einem Moderator gelöscht.
Gast #5299695
Lesenswert?
• ▲
▼
Daniel A. schrieb:
> Ich würde einfach jede text-node von jedem Element in document.all
> prüfen:
>
1
> function clearTagsWithText(text){
2
>   Array.prototype.slice.call(document.all).forEach(function(tag){
3
>     if(Array.prototype.slice.call(tag.childNodes).filter(function(child){
4
>       return child.nodeType == Node.TEXT_NODE && 
5
> child.nodeValue.indexOf(text) != -1;
6
>     }).length){
7
>       tag.innerHTML = '';
8
>     }
9
>   });
10
> }
11
>

Wenn man Fälle wie <p>ein<em>heit</em>lich</p> (wird nicht gefunden) 
ignorieren kann ist das eine effizientere Lösung.
Beitrag #5300771 wurde von einem Moderator gelöscht.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.