Jump to content
  • 0

Пустой узел текста


kosh_
 Share

Question

Творится что-то непонятное (во всяком случаи для меня):

Есть тело

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>

<html>

<body>

<div>

<strong>123</strong>

<strong>123</strong>

<strong>123</strong>

</div>

</body>

</html>

Я пытаюсь изменить дочерние объекты div-а, но не могу так как после каждого </strong> он мне создает еще один объект. И в итоге получается что дочерних объектов не 3, а 5!!

Средства разработки в IE8 ставит в дереве документа, после каждого

<strong>123</strong> объект "Текст - Пустой узел текста".

Тоже самое происходит с любым тегом, который непреспособлен к закрытию по html4 (input, img и тд.), даже если я их закрываю <img />

но!!

если писать

<div><strong>123</strong><strong>123</strong><strong>123</strong></div>

то все нормально и дочерних объектов 3!!

Помогите люди, разобраться почему так, и как мне действовать дальше

Link to comment
Share on other sites

22 answers to this question

Recommended Posts

  • 0
А вы знаете, что пробелы, символы перевода каретки (enter), символы табуляции, и прочие буковки являются .... элементами, наравне с тегами? Это текстовая нода.

Возможно, даже весьма возиожно, но!!

Почему тогда табуляция не создает такие призраки??

И как тогда поступать с этим?? все в div писать с строчку??

А как же тогда форматирование кода для понимания?? Может есть какой способ для того, чтобы код разметки и в теле выглядил по нормальному??

Link to comment
Share on other sites

  • 0
А как же тогда форматирование кода для понимания??

Для понимания делай форматированный код, а для нормальной быстрой и корректной работы делай правильный сжатый, занимающий мало места и трафика код.

Link to comment
Share on other sites

  • 0

Понятно...

А есть ли какой нибудь способ кроме как ручного, сжать разметку. Например если используется связка html и php

Или же лучше все лишние ноды убирать вручную??

_________________________

Еще одна поправка:

А почему контейнер:

<div>

<p>123</p>

<p>123</p>

</div>

Работает коректно

получается что в div 2 потомка, а не 6 как при использование тегов неразрывающих строку?? Дело в способности тега разрывать строку??

Edited by kosh_
Link to comment
Share on other sites

  • 0

ага. спасибо

____________________

И все таки что-то тут я недопонимаю. Почему же простые тогда переходы на новую строку не создают таких призраков??

Такой казус происходит только при переходе от тега неразрывающего строку.

Почитал немного. Написано, что XHTML игнорирует пробелы и переходы на новоую строку. Как же тогда получается??

Edited by kosh_
Link to comment
Share on other sites

  • 0
ага. спасибо

____________________

И все таки что-то тут я недопонимаю. Почему же простые тогда переходы на новую строку не создают таких призраков??

Такой казус происходит только при переходе от тега неразрывающего строку.

Почитал немного. Написано, что XHTML игнорирует пробелы и переходы на новоую строку. Как же тогда получается??

http://www.w3.org/TR/html401/appendix/note...tes-line-breaks

Link to comment
Share on other sites

  • 0
Написано, что XHTML игнорирует...

1) Где написано?

2) Если смотрите в IE — забудьте про XHTML, его там не бывает.

Дело в способности тега разрывать строку??

Зависит от браузера. В Gecko, если не путаю, пустые текстовые ноды от пробелов между тегами появляются всегда. В поведении IE есть логика (что отобразится в тексте, хотя бы в виде пробела, то и учитывается), но полагаться на это не стоит.

И как тогда поступать с этим??

div.getElementsByTagName('strong') и т.п. в помощь.

Link to comment
Share on other sites

  • 0
div.getElementsByTagName('strong') и т.п. в помощь.

Это вариант если в контейнере однотипные потомки. А если там собраны и input и img и strong куча всего подобного??

И еще раз возращаюсь к (например) <p></p>

Почему же

<div onclick='количество потомков'>

<p>123</p>

<p>123</p>

<p>123</p>

</div>

работает корректно. ВЫДАЕТ 3, а

<div onclick='количество потомков'>

<strong>123</strong>

<strong>123</strong>

<strong>123</strong>

</div>

работает некоректно. ВЫДАЕТ 6

??

Link to comment
Share on other sites

  • 0

ентер между

</strong>
<strong>

пробел, то есть тот самый узел,

между

</p>
<p>

он не учитывается, ибо они блочные элементы, и между ними "как бы" не может быть текстовых узлов..

как то так

Link to comment
Share on other sites

  • 0
ентер между

</strong>
<strong>

пробел, то есть тот самый узел,

между

</p>
<p>

он не учитывается, ибо они блочные элементы, и между ними "как бы" не может быть текстовых узлов..

как то так

Значит получается, что:

<div>

<strong>123</strong>

<div>

<strong>123</strong>

<strong>123</strong>

</div>

</div>

в понимание разметки html, неправильный??

и тогда получается правильное форматирование будет:

<div>

<strong>123</strong><div>

<strong>123</strong><strong>123</strong></div>

</div>

??

или вообще, все написанно в одну строчку:

<div>

<strong>123</strong><div><strong>123</strong><strong>123</strong></div>

</div>

Понятно что можно после создания, все переходы убрать, но это вроде как-то..... Особенно в процессе тестов. Какое-то туда сюда >__<

Но в этом же черт ногу сломит!! особенно если наполнение <div> будет сложнее, особенно если ГОРАЗДО сложнее!!

Link to comment
Share on other sites

  • 0
<div>

<strong>123</strong>

<div>

так кокрас норм, хотя может и остаться пробел, кто его знает..

вариант писать всё в одну строчку и не париться...

блин, ну как можно не понять где можно переносить строку а где нет.. %))))

Link to comment
Share on other sites

  • 0

Мне кажется, что проблема Ваша в том, что Вы не до конца поняли что есть блочное и что такое строчное. Вы, как мне показалось, блочным считаете некие такие вехи, куски на которые поделен документ. Это и так и не так одновременно. Не забывайте, есть еще вложенность. Внитри блочного будут действовать те же законы, что и снаружи. Верстайте все грамотно. Несмотря на то, что между блочными элементами не учитывается ничего (в IE встречал несколько исключений), делайте красивую вложенную структуру блочных элементов. А Текстовые элементы, например, абзац - представляют внутри блочного, безо всяких отступов, просто строку, и не важно как там это будет расположено и в какой последовательности идут теги и текст.

Пример:

<div>
<h1>Пример железно работующей семантической разметки и ее оформления</h1>
<p>Тут строчное — текст и все остальные линейные элементы, такие как <span>SPAN</span>, <strong>STRONG,</strong> <em>EM,</em> и все остальное разнообразие тегов, у которых по дефольту в CSS {display:inline}. Ни в коем случае не разбивайте строку, обрамленную блочным элементом от начала и до конца со всеми инлайн элементами никакими уродскими переносами строк.</p>
<p>Тут строчное — текст и все остальные линейные элементы, такие как <span>SPAN</span>, <strong>STRONG,</strong> <em>EM,</em> и все остальное разнообразие тегов, у которых по дефольту в CSS {display:inline}. Ни в коем случае не разбивайте строку, обрамленную блочным элементом от начала и до конца со всеми инлайн элементами никакими уродскими переносами строк.</p>
<ul>
<li>Тут не все очевидно, ибо у LI по дефольту {display:list-item}, могут быть определенные проблемы, но назначение стиля {display:block} устраняет множество проблем, связанных с поялением непонятных пробелов;</li>
<li>
<p>Тут характерный пример, в котором показано, что строчное и блочное нежелательно держать на одном уровне вложенности, да и для семантики. конечно, это более правильно;</p>
<ul>
<li>Ух ты, вложенный список.</li>
</ul>
</li>
</ul>
</div>

Этот пример, и все остальное, сделанное по тому же принципу будет всегда железно работать во всех браузерах.

Конечно, можно переназначать блочные и лист-итем стили для элементов на строные, но ээто уже совсем другая песня.

Edited by Justnewone
Link to comment
Share on other sites

  • 0

мда уж....

Принцеп то я уже понял. просто как то по форматированию некрасиво получается. охото же что бы раскрыть блокнот и глаз любуется. А тут нет.

Все строчки в длину получаются. Жаль ну да ладно. Кому сейчас легко.

Значит. всем спасибо!!

Link to comment
Share on other sites

  • 0
мда уж....

Принцеп то я уже понял. просто как то по форматированию некрасиво получается. охото же что бы раскрыть блокнот и глаз любуется. А тут нет.

Все строчки в длину получаются. Жаль ну да ладно. Кому сейчас легко.

Значит. всем спасибо!!

Скажите блокноту или любому другому редактору "перенос строк" и он будет не делая физ-кий перенос показывать перенесенные строки. Ну децкосадовский уровень, чесслово...

Link to comment
Share on other sites

  • 0

блин, уж честно слово, уже бошка болит от него %) выкинь своё форматирование, у всех всё нормально, и нормально получается никто не жалуется, а тут на тебе..

включи один раз логику и делай переносы где надо, а не после каждого тега.. %) ну на.. %)

Link to comment
Share on other sites

  • 0

Блин... спрашиваю "есть ли вариант??". Нет да, да нет.. нафиг на низмености переходить??

Прямо такие все довольные?? да, что-то смущает, да спросил причины и варианты.

Если так нервничаем, можно просто проигнорировать, а не демонстрировать гневное негодование.

Детсад, только немного не в той стороне.

И все равно, все спасибо.

Link to comment
Share on other sites

  • 0
Блин... спрашиваю "есть ли вариант??".

Используйте не HTML, а тот же PHP, в котором можно применить простую функцию, которая все форматированное содержимое странички будет превращать в одну строчку.

Открываете код - красота. Открываете HTML - одна строчка.

Link to comment
Share on other sites

  • 0

Честно говоря, не хочется помогать таким людям. Все разжевали и положили в рот, причем многократно, а проблема была в том, что не умеем отображения переносов строк в блокноте настраивать...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy