zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden Eltern-Element ausblenden

Antwort
 
LinkBack Themen-Optionen Ansicht
  #11 (permalink)  
Alt 19.10.2018, 10:53
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.291
AndreasB wird schon bald berühmt werden
Standard

Der Code Pen Link, den ich gepostet hatte, enthält alles zum Testen:


https://codepen.io/fermion/pen/LgmLMQ
__________________

Mit Zitat antworten
Sponsored Links
  #12 (permalink)  
Alt 19.10.2018, 10:56
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.291
AndreasB wird schon bald berühmt werden
Standard

Mit GetElementByID funktioniert "closest" übrigens:

https://codepen.io/fermion/pen/NOMaXY


Edit:
Wenn ich

ele=ele.closest('div');
ein zweites Mal eingebe, wirkt das zweite "closest" nicht.
__________________


Geändert von AndreasB (19.10.2018 um 11:00 Uhr)
Mit Zitat antworten
Sponsored Links
  #13 (permalink)  
Alt 19.10.2018, 11:48
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 30.01.2014
Beiträge: 1.931
cloned ist ein Lichtblickcloned ist ein Lichtblickcloned ist ein Lichtblickcloned ist ein Lichtblickcloned ist ein Lichtblick
Standard

"Es funktioniert nicht" stimmt nicht, es funktioniert sehr wohl.
Tipp: Man kann auch, bevor man sagt "es geht nicht", 1 Minute verwenden, die Funktion zu googlen.
https://developer.mozilla.org/en-US/...lement/closest
hier der erste Satz: returns the closest ancestor of the current element (or the current element itself)

Macht auch sinn, weil closest div zu einem div ist man selber. Man ist sich selbst der nächste

Da müsstest du .parentNode.closest('div') verwenden.

Warum es mit getElementsByClassName nicht geht habe ich dir bereits in meinem ersten Post geschrieben, da brauchst du dann eine Schleife, da du mehr als ein Element zurückbekommst.

da schau ich dass ich dir den code noch erweitere.
Mit Zitat antworten
  #14 (permalink)  
Alt 19.10.2018, 12:15
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.291
AndreasB wird schon bald berühmt werden
Standard

Herzlichen Dank für Deine Hinweise

Ich hatte übrigens in der JS-Doku zu closest gelesen, bin aber (leider) nicht auf die Ursache gekommen.


Vielleicht ist es für die beabsichtigte Nutzung in Userscripts zum Ausblenden von unerwünschtem Inhalt doch am besten mehrfach "parentNode" statt "closest" zu verwenden.


Sonst hat man möglicherweise schnell Kollateralschäden.


Danke im voraus schonmal für Deine Hilfe beim Anpassen des Codes für "getElementsByClassName".
__________________

Mit Zitat antworten
  #15 (permalink)  
Alt 19.10.2018, 15:59
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 23.01.2018
Beiträge: 142
basti1012 befindet sich auf einem aufstrebenden Ast
Standard

bei deinen Code pen machst du einfach eine [0] hinter den Class
Code:
ele=document.getElementsByClassName('kind')[0];
ele=ele.parentNode;
ele=ele.parentNode;
ele=ele.parentNode;
ele.style.display='none';
Hast du mehrer Divs mit den gleichen ClassNamen brauchst du wie @cloned schon sagte eine Schleifen Funktion. Zb so

Code:
 element=document.querySelectorAll('.kind');
element.forEach((i) => {
i=i.parentNode;
i=i.parentNode;
i=i.parentNode;
i.style.display='none';
});
Damit werden alle Eltern ausgebledet deren ClassName('kind') ist.
Hast du nur ein Container der so ausgeblendet ist reicht natürlich der erste Code.
Hast du mehrer ClassName('kind') und willst das nur der 3 in der reihe ausgeblendet werden soll muss man die [0] mit einer [2] austauschen.

Die Zahlen brauch man nur Bei.
ClassName
TagName
Name
bei id nicht weil id nur einmal pro Seite vor kommen darf

Geändert von basti1012 (19.10.2018 um 16:02 Uhr)
Mit Zitat antworten
  #16 (permalink)  
Alt 19.10.2018, 17:27
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.291
AndreasB wird schon bald berühmt werden
Standard

Vielen Dank!


Der erste Code funktioniert schonmal.


Den zweiten mit der Iteration muss ich noch verstehen.


Dann muss ich noch rausfinden, warum das Ganze als Userscript in Greasemonkey nicht wirkt.


Code:
// ==UserScript==
// @name         Spiegel+ ausblenden
// @author       Andreas
// @include      *spiegel.de/*
// ==/UserScript==

ele=document.getElementsByClassName('spplus')[0];
ele=ele.parentNode;
ele=ele.parentNode;
ele=ele.parentNode;
ele.style.display='none';

Der originale Quelltext von spiegel.de wird in CodePen wirksam ausgeblendet. Irgendeinen Haken gibt es noch bezüglich Greasemonkey.
__________________

Mit Zitat antworten
  #17 (permalink)  
Alt 20.10.2018, 11:45
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 23.01.2018
Beiträge: 142
basti1012 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AndreasB Beitrag anzeigen
Irgendeinen Haken gibt es noch bezüglich Greasemonkey.
Ja Greasmonkey ist halt etwas zickig. Aber hast du dran gedacht was ich zu den Zahlen sagte ?

ele=document.getElementsByClassName('spplus')[0];

Wenn im Quellcode nochmal "spplus" gibt must du die Zahlen anpassen. Am besten gibst du im Browser beim Quelltext in der Suche "spplus" an dannn werden die alle ClassNamen markiert die so heißen. Dann zählst du die bis du zu deinen Container angekommen bist denn du ausblenden willst und dann minus 1..
da du da eine 0 drnne hast ist es ja der erste ClassName auf der Seite und wie du selber weist kann das auch ein hidden Feld sein was schon ausgeblendet ist und dann siehst du auch nicht ob dein Code überhaupt funktioniert hat.
Auf welcher Seite willst du den was ausblenden dann kucke ich mal selber bei Greasmonkey (Tampermonkey ) rein ob da noch was anderes ist was mucken macht

Geändert von basti1012 (20.10.2018 um 11:50 Uhr)
Mit Zitat antworten
  #18 (permalink)  
Alt 20.10.2018, 12:59
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.291
AndreasB wird schon bald berühmt werden
Standard

Zitat:
Zitat von basti1012 Beitrag anzeigen
Ja Greasmonkey ist halt etwas zickig. Aber hast du dran gedacht was ich zu den Zahlen sagte ?

ele=document.getElementsByClassName('spplus')[0];

Wenn im Quellcode nochmal "spplus" gibt must du die Zahlen anpassen. Am besten gibst du im Browser beim Quelltext in der Suche "spplus" an dannn werden die alle ClassNamen markiert die so heißen. Dann zählst du die bis du zu deinen Container angekommen bist denn du ausblenden willst und dann minus 1..
da du da eine 0 drnne hast ist es ja der erste ClassName auf der Seite und wie du selber weist kann das auch ein hidden Feld sein was schon ausgeblendet ist und dann siehst du auch nicht ob dein Code überhaupt funktioniert hat.
Auf welcher Seite willst du den was ausblenden dann kucke ich mal selber bei Greasmonkey (Tampermonkey ) rein ob da noch was anderes ist was mucken macht

Da es nicht nur um ein einziges auszublendendes Element geht, möchte ich eben mit dem Script alle ausblenden, auf die ein bestimmtes "Muster" trifft:


ein Element A mit Class="sspplus", mit einem Elter H1, dieses mit einem Elter DIV und dieses auch mit einem Elter DIV.


Wie in der Ausgangsfrage geschildert geht es mir um das Nachbilden eines nicht existierenden CSS-Selektors.

Angenommen es gäbe Vorfahrenselektoren, nehmen wir das Symbol Δ, dann wäre das so ein - fiktiver - CSS-Selektor:


a.ssplus Δ h2 Δ div Δ div { display: none !important }

Die Website um die es mir zur Zeit konkret geht (aber natürlich gibt es auch andere) ist spiegel.de.
Dort sollen alle Vorschauen ausgeblendet werden, die zu Artikeln hinter einer Paywall führen.



Der Originale Code lautet:


HTML-Code:
<div class="teaser" data-sponlytics-id="true" id="sponlytics-teaser-hp-3" data-sponlytics-area="slot">            <div class="clearfix">                <h2 class="article-title article-icon-big">    <a href="http://www.spiegel.de/plus/er-wollte-es-brutal-a-00000000-0002-0001-0000-000160085755" title="Ex-FBI-Agent zum Mord an Khashoggi: &quot;Er wollte es brutal&quot;" class="article-icon spplus" data-sponlytics-ec="spplus"><span class="headline-intro">Ex-FBI-Agent zum Mord an Khashoggi</span> <span class="headline">"Er wollte es brutal"</span></a></h2><div class="article-image-box box-position 230_poster_16x9 asset-align-left">        <a href="http://www.spiegel.de/plus/er-wollte-es-brutal-a-00000000-0002-0001-0000-000160085755" title="Ex-FBI-Agent zum Mord an Khashoggi: &quot;Er wollte es brutal&quot;" data-sponlytics-ec="spplus"><img src="http://cdn1.spiegel.de/images/image-1352138-230_poster_16x9-izbb-1352138.jpg" title="Ex-FBI-Agent zum Mord an Khashoggi: &quot;Er wollte es brutal&quot;" alt="Ex-FBI-Agent zum Mord an Khashoggi: &quot;Er wollte es brutal&quot;" width="230" height="129"></a><div class="asset-credit">Anadolu Agency / Abaca Press / ddp images</div>        </div><p class="article-intro">            Der ehemalige FBI-Agent Ali Soufan über Motive für den möglichen Mord an Jamal Khashoggi und die politischen Folgen. <span class="author">Von Britta Sandberg</span> <a href="http://www.spiegel.de/plus/er-wollte-es-brutal-a-00000000-0002-0001-0000-000160085755" title="Ex-FBI-Agent zum Mord an Khashoggi: &quot;Er wollte es brutal&quot;" class="more-link" data-sponlytics-ec="spplus">mehr...</a> </p>    </div>                            <ul class="article-list" data-sponlytics-area="list">        <li>                    <a href="http://www.spiegel.de/plus/der-prinz-und-der-mord-a-00000000-0002-0001-0000-000160085745" title=" SPIEGEL-Titelstory: Der Prinz und der Mord " class="article-icon spplus" data-sponlytics-ec="spplus"><span class="asset-headline-intro">SPIEGEL-Titelstory:</span> <span class="asset-headline">Der Prinz und der Mord</span></a></li>            </ul>    </div>
Die Aufgabe hat es also doch ganz schön in sich.

Vielleicht liegen die Gründe auch in den programmiertechnischen Schwierigkeiten, sonst gäbe es vielleicht längst in CSS einen Vorfahren-Selektor.

Danke schonmal dafür, dass Du Dir das ansehen möchtest.

Sollte es eine Lösung geben, wäre das jedenfalls ein sehr potentes Mittel um unerwünschtes Zeug auf Websites zu eliminieren.


Ich habe den Code Pen nochmal ergänzt um einen weiteren DIV Container, damit man so leicht prüfen kann, ob wirklich alle DIV Container durch das Script getroffen werden.


https://codepen.io/fermion/pen/LgmLMQ

Nochmal als Hinweis:
Du kannst den Code Pen einfach "forken", dann kann man sich hier mühelos über Code und seine Funktion austauschen.


Hier nochmal ein Code Pen, wo ich Deinen zuletzt geposteten Code mit der Iteration verwende:

https://codepen.io/fermion/pen/JmZNPw

Das funktioniert, da werden alle Container ausgeblendet.


Würdest Du diesen Code als am stabilsten für den beschriebenen Zweck (Nachbilden eines Vorfahren-Selektors) empfehlen?


In Greasemonkey funktioniert der Code aus diesem letzten Code Pen leider nicht.
Natürlich habe ich den Klassennamen von "kind" auf "ssplus" angepasst.

Am Rande: ich habe in Greasemonkey keine Info gefunden, wie man statt einer URL (http://www....) allein eine Domain "spiegel.de" als Bedingung angeben kann.

https://developer.chrome.com/extensions/match_patterns

Wäre
Code:
@include *spiegel.de/*
korrekt?



Die semantische Qualität des HTML SPON ist leider immer noch unterirdisch schlecht.
Denn ansonsten gäbe es weder DIV-Suppen bei SPON, keinen kilometerlangen redundanten Code und natürlich hätte jeder Vorschau-Container zu Spiegelplus das Klassenattribut "ssplus" und solche Hacks wie wir sie gerade versuchen zu entwickeln wären völlig überflüssig.

Ich reibe mir bei der absolut grottigen Qualität des Codes des SPON-CMS immer wieder verwundert die Augen.
Wer verantwortet bloß so einen Mist.
Miserabel wartbar.
__________________


Geändert von AndreasB (20.10.2018 um 13:23 Uhr)
Mit Zitat antworten
  #19 (permalink)  
Alt 21.10.2018, 16:52
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 23.01.2018
Beiträge: 142
basti1012 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AndreasB Beitrag anzeigen
Wäre
Code:
@include *spiegel.de/*
korrekt?
.
ja schon aber
ich würde es so machen.
Code:
@include http*://*spiegel.de/*
nur 100% ist es so auch nicht ,wenn du eine andere seite findest die auch den Text in der url hat greift Greasmonkey da auch zu .
Habe bei mir in Greasmonkey ein Script für das Online spiel pennergame drinne. Funktioniert gut. Doch wenn ich bei google nach einen bestimmten pennergame word suche kann es sein das die url bei Googel in Link erscheint und schon greift Greasmonkey.
Du kannst höchsztens wenn du mal sowas hast mit
Code:
@exclude *google.de*
die Seite für das Script ausschliesen.

Zu deinen anderen Fragen kucke ich mir gleich mal bei Spiegel genauer an . Bin erst jetzt wach geworden weil wahr gestern etwas krank und kam zu nix.
Melde mich heute noch aber wird etwas später
Mit Zitat antworten
Sponsored Links
  #20 (permalink)  
Alt 21.10.2018, 18:13
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.291
AndreasB wird schon bald berühmt werden
Standard

Gute Besserung!
__________________

Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
jQuery: Element beim Scrollen ausblenden DavidNF Javascript & Ajax 2 21.09.2011 10:48
Element ausblenden, wenn anderes eingeblendet wird vik.alive Javascript & Ajax 13 11.05.2009 14:16
Liste im IE StarSt0rm CSS 3 22.08.2007 21:04
element ausblenden, aber klickbar belassen antiheld2000 CSS 4 07.05.2007 17:22
Element mit Javascript ein- und ausblenden yellowfox Javascript & Ajax 1 17.08.2006 17:05


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:52 Uhr.