2011-01-02 5 views
0

Ok ich habe eine Liste von HTML-Knoten, die inline sein sollte, ohne Abstand zwischen ihnen. Das Problem ist, dass die Knoten aus einem CMS stammen und daher mit allen möglichen Zeilenumbrüchen und Leerzeichen kommen. Daher entferne ich die Leerzeichen mit JS mit der in this question beschriebenen Methode. Das Problem ist jedoch, dass in IE (nicht 9) die Leerstellen nicht Teil der Kinderliste des Elternknotens sind, was die Methode in IE unbrauchbar macht. IE 7 (oder zumindest IE 9, der IE 7 emuliert) ignoriert jedoch die Zeilenumbrüche, so dass man im Klartext ist. Damit bleibt IE 8 der Unruhestifter. Ich entdeckte, dass der Zeilenumbruch ist eigentlich ein Teil des outerHTML und dass ein einfaches Reset des outerHTML der Trick - wie so:IE 8 Zeilenumbruch zwischen Knoten mit JavaScript entfernen

node.outerHTML = node.outerHTML 

Dies wird jedoch den Knoten zurückgesetzt intirely und damit alle Ereignisse und andere Einstellungen zu entfernen auf dem Knoten, was nicht wirklich gut ist.

Also meine Frage ist jetzt: Gibt es eine Möglichkeit, diese Zeilenumbruch von den Knoten OuterHTML ohne Zurücksetzen des Knotens zu entfernen? Ich habe es mit Zoom versucht: 1, aber ohne Erfolg. Hoffe, dass irgendjemand irgendwelche Erfahrung damit hat.

Die HTML ist mehr oder weniger wie folgt aus:

<div class="items"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 

aber es muss <div> nicht sein sollte jegliche Tag zu handhaben können. Die CSS ist ziemlich einfach und geht in etwa so:

.items { white-space: nowrap; } 
.items .item { display: inline-block; background: red; height: 150px; width: 180px; } 

und IE (6-7 (8)) Stil ist wie folgt:

.items .item { *display: inline; *zoom: 1; } 

ich weiß, dass es möglich ist, zu "entfernen" Dieser Platz über CSS wie folgt:

aber ich finde dies ein hässlicher Hack, der manchmal Dinge vermasselt. Da ich die Elemente bereits über JS manipuliere, habe ich nur gehofft, die Leerzeichen über JS zu entfernen.

Eine kleine Vorschau von dem, was ich meen:

No spacing should appear between the squares http://tokimon.dk/stackoverflow/display-inline-spacing.png

+0

@Tokimon Sie Probe veröffentlichen können HTML, das dein CMS wirft? Kann das als Testfall verwenden. :) –

+0

Ich habe das HTML hinzugefügt, aber da es noch nicht im CMS implementiert ist, ist das HTML ziemlich direkt. – Tokimon

+0

@Tokimon - Warte .. du meinst Zeilenumbrüche entfernen oder * leere Elemente entfernen *? Es gibt einen großen Unterschied zwischen diesen beiden. –

Antwort

0

Klingt wie ein Box-Modell Problem IE. Hast du dieses Meta-Tag in deinem HEAD?

<meta http-equiv="X-UA-Compatible" content="IE=8" /> 
+0

Entschuldigung m8. Ich habe bereits im Bereich . Es scheint als allgemeines IE-Problem, aber ich habe wirklich keine Ahnung, warum der Raum in IE 6 + 7 eliminiert wird. Und nur für den Rekord benutze ich den HTML5 Doctype. – Tokimon

0

Von schnellen Test, was Sie wollen, können mit reinem CSS erreicht werden - haben nur alle "Elemente" float:

.items .item { float: left; background: red; } 

Aktualisiert Testfall: http://jsfiddle.net/yahavbr/jBH5D/4/

+0

Ja, ich weiß ... Aber dann muss ich eine Breite für den Container angeben, um zu verhindern, dass die Objekte sich gegenseitig umhüllen, was ich vermeiden wollte. – Tokimon

+0

@Tokimon können Sie einfach Breite mit clientseitigem Code entsprechend der aktuellen Dokumentbreite einstellen, wenn Sie es relativ oder etwas ähnliches wollen. –

+0

ich weiß .. aber ich muss die Breite jedes Mal neu berechnen, wenn ein Knoten hinzugefügt oder entfernt wird. irgendwie saugt und ist ressourcenverbrauchend :) – Tokimon