Elternelement ausblenden
Sympatisant
- css
Hallo allerseits,
folgendes Szenario:
<p>
<label></label>
</p>
Besitzt das Label-Element die Moeglichkeit, sich bzw. sein _uebergeordnetes_
Elternelement auszublenden - also dass das P-Element nicht sichtbar wird?
Gruss & Danke!
MfG,
Sympatisant
@@Sympatisant:
Besitzt das Label-Element die Moeglichkeit, sich
Ja.
bzw. sein _uebergeordnetes_ Elternelement auszublenden
Nein. (Es sei denn mit JavaScript.)
Live long and prosper,
Gunnar
Salvete,
Danke fuer deine Antwort!
Ja.
Schade.
Nein. (Es sei denn mit JavaScript.)
OK. Nochmal ausgehend von dem Beispiel:
<p>
<label>dummy</label>
</p>
<br>
Ich habe es bereits geschafft, dass der Paragraph entfernt wird
(mittels removeChild). Nun wuerde ich gerne das darauffolgende
BR auch noch entfernen.
Ich habe so etwas wie "nextSibling" gefunden, was in meinem Falle
jedoch null ausliefert.
Ausgehend von dem Label (oder dem Paragraphen), was fuer eine
Moeglichkeit gibt es da, an - aus der DOM-Hirarchie betrachtet -
das naechste Element, also dem BR, zu gelangen?
Kannst du mir da auf die Spruenge helfen?
Danke.
MfG,
Sympatisant
@@Sympatisant:
Ich habe es bereits geschafft, dass der Paragraph entfernt wird
(mittels removeChild). Nun wuerde ich gerne das darauffolgende
BR auch noch entfernen.
Ich habe so etwas wie "nextSibling" gefunden, was in meinem Falle
jedoch null ausliefert.
Nachdem du das 'p'-Element aus dem Elementbaum entfernt hast, kannst du natürlich nicht mehr auf dessen (ehemalige!) Geschwister zugreifen.
Was ist denn aber dein eigentliches Problem?
Live long and prosper,
Gunnar
Salvete,
Nachdem du das 'p'-Element aus dem Elementbaum entfernt hast, kannst du
natürlich nicht mehr auf dessen (ehemalige!) Geschwister zugreifen.
Da habe ich mich anscheinend falsch ausgedrueckt. Natuerlich versuche ich
_vor_ dem Loeschen das Element zu bekommen.
Was ist denn aber dein eigentliches Problem?
Mein Problem ist, dass ich mit Code arbeite, denn ich nicht editieren kann (Java+Velocity).
Du kannst dir das in etwa so vorstellen:
<p>
#buildLabel($property $label ..)
</p>
<br>
Die Methode buildLabel liefert, abhaengig von den jeweiligen Rechten des
Benutzers, entwerder das entsprechende Label-Tag, oder aber nichts zurueck.
Und im letzten Falle entsteht dadurch eine Leerzeile bzw. eine weisse
Flaeche (da das P-Element eine gewisse Heohe besitzt).
Mein Ziel ist es, eben diese Bereich zu entfernen.
Was das <p> angeht, so war ich ja schon erfolgreich. Nun soll aber auch
noch das zugehoerige <br> entfernt werden - aus dem selben Grund wie
bereits oben beschrieben.
Da die Methode buildLabel einen Event feuert, an den ich recht gut andocken
kann, waehlte ich nun die Variante mit dem JavaScript.
MfG,
Sympatisant
@@Sympatisant:
Mein Problem ist, dass ich mit Code arbeite, denn ich nicht editieren kann (Java+Velocity).
Du kannst dir das in etwa so vorstellen:
<p>
#buildLabel($property $label ..)
</p>
<br>
So richtig vorstellen kann ich mir das nicht. Welchen Code kannst du ändern, welchen nicht?
Wenn du JavaScript einfügen kannst, kannst du also den HTML-Code ändern?
Das 'br'-Element dürfte da reichlich unsinnig sein. Was soll das bezwecken?
> (da das P-Element eine gewisse Heohe besitzt).
?? Warum tut es das? Setze doch margin und padding auf 0 und gib stattdessem dem 'label'-Element etwas margin.
Live long and prosper,
Gunnar
--
[Erwebsregel](http://memory-alpha.org/de/wiki/Erwerbsregeln_der_Ferengi) 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
Salvete,
So richtig vorstellen kann ich mir das nicht. Welchen Code kannst du
ändern, welchen nicht?
Den Code, den die Methoden zurueckliefert und eingentlich auch den Code
mit den <p> und <br> Tags.
Wenn du JavaScript einfügen kannst, kannst du also den HTML-Code ändern?
Jein. Der Code wird zum groessten Teil von einer Software generiert. Und
da komme ich nicht ran bzw. ist es die Anforderung.
Das 'br'-Element dürfte da reichlich unsinnig sein. Was soll das
bezwecken?
Das <p>-Element wird gefloatet. Zugegeben, das p-Tag wird vllt. ein wenig
missbraucht. Stell dir einfach vor es waere ein DIV ;)
(da das P-Element eine gewisse Heohe besitzt).
?? Warum tut es das? Setze doch margin und padding auf 0 und gib
stattdessem dem 'label'-Element etwas margin.
Wie oben bereits geschrieben kann ich nur maginal etwas aendern.
Deine Bemuehung, dass _eigentliche_ Problem zu eroertern, ist nett
gemeint. Doch das, was mir jetzt nuetzen wuerde, waere eigentloch nur
die Sache mit dem Auslesen des BRs mittels Javascript.
Und ich wundere mich, warum ich da nicht drankomme.
Danke!
MfG,
Sympatisant
@@Sympatisant:
Doch das, was mir jetzt nuetzen wuerde, waere eigentloch nur
die Sache mit dem Auslesen des BRs mittels Javascript.
Und ich wundere mich, warum ich da nicht drankomme.
Warum willst du das auch?
Sorge mit CSS dafür, dass <p></p><br />
keinen unerwünschten Abstand erzeugt!
Für den Fall <p><label></label></p><br />
bekommt das 'label'-Element den erwünschten Abstand.
Dann sollte es unnötig sein, mit JavaScript aus dem Elementbaum was rauszunehmen.
Live long and prosper,
Gunnar
Salvete,
Warum willst du das auch?
Ich dachte das haette ich dir jetzt ausfuehrlich erklaert.
Sorge mit CSS dafür, dass <p></p><br /> keinen unerwünschten
Abstand erzeugt!
Wie kann ich denn sagen, dass ein <br> nach einem leerem <p> _keinen_
Abstand erzeugen soll?
Für den Fall <p><label></label></p><br /> bekommt das 'label'-
Element den erwünschten Abstand.
Wie kann ich denn sagen, dass ein <br> nach einem nicht leeren <p>
_einen_ Abstand erzeugen soll?
Dann sollte es unnötig sein, mit JavaScript aus dem Elementbaum was
rauszunehmen.
Wie gesagt, wenn das o.g. irgendwie per CSS definiert werden kann, dann
gebe ich dir durchaus recht und wuerde mich dessen auch freuen ;-)
MfG,
Sympatisant
@@Sympatisant:
Warum willst du das auch?
Ich dachte das haette ich dir jetzt ausfuehrlich erklaert.
Ich dachte, ich hätte ausführlich erklärt, was du stattdessen tun kannst. Nämlich:
Sorge mit CSS dafür, dass <p></p><br /> keinen unerwünschten
Abstand erzeugt!
Wie kann ich denn sagen, dass ein <br> nach einem leerem <p> _keinen_
Abstand erzeugen soll?
p {margin-bottom: 0}
br {display: none}
Für den Fall <p><label></label></p><br /> bekommt das 'label'-
Element den erwünschten Abstand.
Wie kann ich denn sagen, dass ein <br> nach einem nicht leeren <p>
_einen_ Abstand erzeugen soll?
Nicht das 'br' soll den Abstand erzeugen, sondern 'label'. Sagte ich doch gerade.
gebe ich dir durchaus recht und wuerde mich dessen auch freuen ;-)
Und, hüpfst du jetzt im Kreis?
Live long and prosper,
Gunnar
Hallo Gunnar,
Sorge mit CSS dafür, dass <p></p><br /> keinen unerwünschten
Abstand erzeugt!
Wie kann ich denn sagen, dass ein <br> nach einem leerem <p> _keinen_
Abstand erzeugen soll?
p {margin-bottom: 0}
br {display: none}
Wie ich ein BR ausblenden kann ist mir durchaus bewusst. Wie ich schrieb
geht es doch darum, dass das BR nur dann ausgeblendet werden soll, wenn
in dem voranstehenden <p> kein <label> vorhanden ist. Sobald eines
vorhanden ist, soll es durchaus angezeigt werden.
Das hatte ich bereits erklaert... und mich gewundert, dass es laut deiner
Aussgae moeglich waere. Ich hatte schon so etwas befuerchtet.
> Nicht das 'br' soll den Abstand erzeugen, sondern 'label'. Sagte
> ich doch gerade.
Gunnar, du tust so, als ob ich dich nicht verstehen \_moechte\_.
Dem ist nicht so, ich bin fuer deine Antworten dankbar und moechte mein
Problem natuerlich gerne loesen.
> > gebe ich dir durchaus recht und wuerde mich dessen auch freuen ;-)
> Und, hüpfst du jetzt im Kreis?
Vielleicht habe ich das ja jetzt falsch verstanden, aber ich finde deinen
Zynismus ehrlich gesagt unangebracht.
MfG,
Sympatisant
--
"Non dura iubeantur, non prohibeantur inpura."
@@Sympatisant:
Wie ich schrieb geht es doch darum, dass das BR nur dann ausgeblendet werden soll, wenn in dem voranstehenden <p> kein <label> vorhanden ist.
Wie du schriebst, geht es dir um irgendeinen Abstand.
'br' nur unter bestimmten Bedingungen auszublenden, war dein Ansatz, dein Problem zu lösen. Vermutlich nicht der beste, wie ich schon schrieb.
Sobald eines vorhanden ist, soll es durchaus angezeigt werden.
Warum sollte denn das 'br' dann angezeigt werden, wenn ein 'label' vorhanden ist?
Vielleicht habe ich das ja jetzt falsch verstanden
Vermutlich.
aber ich finde deinen
Zynismus ehrlich gesagt unangebracht.
Von Zynismus war hier keine Spur. (Und du kannst mir glauben, dass ich durchaus wirklich zynisch sein kann, wenn ich will.)
Live long and prosper,
Gunnar
Salvete,
Warum sollte denn das 'br' dann angezeigt werden, wenn ein 'label'
vorhanden ist?
Damit ein Zeilenumbruch erfolgt. Und nein, ich kann nicht das label auf
display:block oder sonst etwas setzen, da es vorkoammen kann, dass
mehrere Labels in einer Zeile dargestellt werden sollen.
Ob ein Umbruch erfolgt oder nicht, das wird aus dem System heraus
definiert. Und nein, ich kann daran nichts aendern!
Von Zynismus war hier keine Spur. (Und du kannst mir glauben,
dass ich durchaus wirklich zynisch sein kann, wenn ich will.)
Naja, das liegt im Auge des betrachters. Hoeflich war es auf jeden
Fall nicht.
Wie auch immer, ich glaube wir kommen hier nicht auf einen gemeinsamen
Nenner. Wie gesagt, es ist nett dass du das Problem an der Wurzel
anpacken moechtest, doch bringt mich das einfach nicht weiter.
Ich habe dir bereits geschrieben, dass ich wenig am Code aendern kann
und es fuer mich die beste Loesung waere, dass <br> mittels Javascript
zu entfernen. Dass ich mich dafuer staendig rechtfertigen muss, sehe ich
einfach nicht ein. Ich bin nicht bloed - es hat schon seinen Sinn.
Moechtest du mir noch helfen, dann kannst du gerne deinen Teil zu der
eigentlichen JavaScript-Frage - welche nun bereits 4 Stunden her ist -
beitragen. Aber bitte nicht wieder fragen warum dies und warum das.
Nicht falsch verstehen, aber das wird mir fuer so eine verhaeltnismaessig
einfache Frage einfach zu viel.
Dennoch Besten Dank, Gunnar.
MfG,
Sympatisant
@@Sympatisant:
Warum sollte denn das 'br' dann angezeigt werden, wenn ein 'label'
vorhanden ist?
Damit ein Zeilenumbruch erfolgt.
?? Zeilenumbruch? Den Effekt erledigt doch das 'p'-Element.
Naja, das liegt im Auge des betrachters. Hoeflich war es auf jeden
Fall nicht.
?? Ich hatte dein Problem (wie du es beschreiben hattest) gelöst und höflich nachgefragt, ob du dich darüber freust.
Live long and prosper,
Gunnar
Salvete,
?? Zeilenumbruch? Den Effekt erledigt doch das 'p'-Element.
Ich hatte ja gesagt, dass ich <p> habe floaten lassen.
Und wie ich gerade hopsel schrieb, habe ich es nun durch ein <span>
ersetzt (natuerlich ohne irgendein anderes Ergebnis).
?? Ich hatte dein Problem (wie du es beschreiben hattest) gelöst und
höflich nachgefragt, ob du dich darüber freust.
OK. Das ist das Problem bei schriftlichen Diskussionen - da kommt oefter
einfach mal etwas falsch an.
Fazit: "Ich bin so klug als wie zuvor". ;-(
Aber danke euch fuer eure Hilfe. Anscheinend kann ich nicht genau
erklaeren, was ich ueberhaupt moechte. (Obwohl es fuer mich, lese ich
die vorangegangenen Beitraege noch einmal durch, eigentlich durchaus
logisch erscheint ;-)
MfG,
Sympatisant
Hi Sympatisant!
Wie ich ein BR ausblenden kann ist mir durchaus bewusst. Wie ich schrieb
geht es doch darum, dass das BR nur dann ausgeblendet werden soll, wenn
in dem voranstehenden <p> kein <label> vorhanden ist. Sobald eines
vorhanden ist, soll es durchaus angezeigt werden.
Wozu denn?
Wenn du außer
p {margin-bottom: 0}
br {display: none}
noch
label {margin-bottom:1em}
benutzt, wird der gewünschte Zeilenabstand doch automatisch erzeugt, (und zwar nur) wenn das Label im Code steht.
Nichts anderes wolltest du doch?!
MfG H☼psel
Salvete,
danke fuer deine Antwort.
Wie ich bereits Gunnar geschrieben habe, soll das <br> natuerlich
einen Zeilenumbruch bewirken. Das dem Label mitzugeben, funktioniert nicht,
dass durchaus mehrere Labels nebeneinander vorkommen koennen.
Und ob nach einem Label ein Zeilenumbruch geschehen soll oder nicht (btw:
es handelt sich nicht nur um Labels, sondern auch um Eingabefelder u.ae. -
das habe ich der Einfachheit wegen nicht erzaehlt), dass bestimmt die
andere Software.
Und, wie bereits erwaehnt, kann die entsprechende Methode
<p> #blablub </p> <br>
auch mal _nichts_ zurueckliefern. Und in diesem Falle soll weder das <p>,
noch das <br> sich auch nur irgendwie auf die Darstellung auswirken.
Und, damit es nicht wieder falsch verstanden wird: nein, das <br>
kann ich nicht entfernen (nicht ohne JavaScript, daher meine Frage)!
MfG,
Sympatisant
Hi Sympatisant!
Und ob nach einem Label ein Zeilenumbruch geschehen soll oder nicht (btw:
es handelt sich nicht nur um Labels, sondern auch um Eingabefelder u.ae. -
das habe ich der Einfachheit wegen nicht erzaehlt), dass bestimmt die
andere Software.
Den Zeilenumbruch hast du ja bei dem <p> so oder so dabei.
Es blieb eigentlich nur noch die Frage, wie du die größe des Abstandes nach unten bestimmen kannst.
Ein einfaches Mittel wäre das letzte Kindelement von p zu selektieren und den gewünschten Abstand einzustellen.
Also:
p *:last-child {margin-bottom:1em}
Das ist wesentlich eleganter als irgendwelches JavaScript-Gedöns.
Wir wollten doch nur helfen... ;-)
MfG H☼psel
Hallo,
Den Zeilenumbruch hast du ja bei dem <p> so oder so dabei.
Naja, ich hatte das <p> gefloatet, und von daher keinen Zelenumbruch.
Das <p> habe ich jetzt jedoch durch <span> ersetzt, das erscheint mir
logischer.
Und wie gesagt sollen auch mehrer Elemente in einer Zeile hintereinander
gestellt werden. Mit Zeilumbruch geht das natuerlich nicht.
Ich erwaehnte ja bereits, dass der Anwender der Fremdsoftware bestimmt,
wann ein Eintrag in eine neue Zeile gestellt werden soll. Er wird dort
dann den entsprechenden <span>-Bereich mit einem abschliessenden <br>
versehen.
Ein einfaches Mittel wäre das letzte Kindelement von p zu selektieren und
den gewünschten Abstand einzustellen.
p *:last-child {margin-bottom:1em}
Laut meinem Wissensstand funktioniert das doch nur im FF?
Wir wollten doch nur helfen... ;-)
Ja, das weiss ich ja. ;-)
MfG,
Sympatisant
Hi Sympatisant!
p *:last-child {margin-bottom:1em}
Laut meinem Wissensstand funktioniert das doch nur im FF?
Ja. Aber vielleicht kennst du ja das letzte Element und kannst es direkt ansprechen. War nur zu faul, dass so auszuschreiben. ;-)
Funktioniert das nun mit dem JavaScript eigentlich?
MfG H☼psel
Hallo.
p *:last-child {margin-bottom:1em}
Laut meinem Wissensstand funktioniert das doch nur im FF?
Ja.
Nein.
MfG, at
Wie ich bereits Gunnar geschrieben habe, soll das <br> natuerlich
einen Zeilenumbruch bewirken.
Ein alleinstehendes BR ist immer ein Zeichen davon, dass das CSS ungünstig ist. Sowas wird i.d.R. nicht benötigt und ich kann mir das anhand deiner Schilderungen nicht vorstellen dass es wirklich nötig ist. Du versuchst momentan ein Symptom zu bekämpfen, anstatt der Ursache auf den Grund zu gehen.
Struppi.
Hallo.
Ein alleinstehendes BR ist immer ein Zeichen davon, dass das CSS ungünstig ist.
Wenn nicht gar das HTML.
Sowas wird i.d.R. nicht benötigt und ich kann mir das anhand deiner Schilderungen nicht vorstellen dass es wirklich nötig ist. Du versuchst momentan ein Symptom zu bekämpfen, anstatt der Ursache auf den Grund zu gehen.
Was ist an der Aussage
Mein Problem ist, dass ich mit Code arbeite, denn ich nicht editieren kann
denn so unverständlich und wurde nicht auf Nachfrage folgendermaßen beantwortet?
Der Code wird zum groessten Teil von einer Software generiert. Und da komme ich nicht ran bzw. ist es die Anforderung.
MfG, at
Hi Sympatisant!
Ich habe es bereits geschafft, dass der Paragraph entfernt wird
(mittels removeChild). Nun wuerde ich gerne das darauffolgende
BR auch noch entfernen.
Ich habe so etwas wie "nextSibling" gefunden, was in meinem Falle
jedoch null ausliefert.
Ausgehend von dem Label (oder dem Paragraphen), was fuer eine
Moeglichkeit gibt es da, an - aus der DOM-Hirarchie betrachtet -
das naechste Element, also dem BR, zu gelangen?
Wenn du das leere <p></p> gefunden hast, kannst du mit removeChild([ParagraphKnoten].nextSibling.nextSibling) das <br> entfernen.
Im DOM-Baum sind Zeichen zwischen den Tags ebenfalls Knoten, also auch Whitespaces.
Ich hoffe, das hilft dir. =)
MfG H☼psel