Forum: PC-Programmierung [Userscript] innerhtml von Elterntags auf '' setzen, wenn der Inhalt ein bestimmtes Wort enthält


von Bardo H. (bardoheinlein)


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?

von Frank L. (Firma: Flk Consulting UG) (flk)


Lesenswert?

Hallo,
Schaumal hier rein:

https://api.jquery.com/find/

Gruß
Frank

Beitrag #5296310 wurde von einem Moderator gelöscht.
Beitrag #5296541 wurde von einem Moderator gelöscht.
von Matthias M. (Gast)


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.

von Daniel A. (daniel-a)


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.
von Matthias M. (Gast)


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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.