[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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren