Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: автоматическая корректировка "битых" тэгов
 
 автор: moonfox   (23.06.2011 в 11:43)   письмо автору
 
 

Здравствуйте,
столкнулся с непонятной проблемой...
есть
<div id="100">text</div>

в него пытаюсь вставить на ajax
old_text + </div><div>more text

в результате вместо
<div id="100">text</div><div>more txt</div>

получаю
<div id="100">text<div>more txt</div></div>

что за чушь?
какая ерунда парсит и типа исправляет код???

  Ответить  
 
 автор: cheops   (23.06.2011 в 11:53)   письмо автору
 
   для: moonfox   (23.06.2011 в 11:43)
 

А чем вставляете? JavaScript?

  Ответить  
 
 автор: moonfox   (23.06.2011 в 11:58)   письмо автору
 
   для: cheops   (23.06.2011 в 11:53)
 

простой пример

<script>
function show()
{
document.getElementById(100).innerHTML  = document.getElementById(100).innerHTML + '</div><div>yes';
}
</script>
<div id="100">
lol
</div>
<a onclick="show();">show</a>


выдает
<div id="100">
lol
<div>yes</div></div>

  Ответить  
 
 автор: Абырвалг   (23.06.2011 в 14:37)   письмо автору
 
   для: moonfox   (23.06.2011 в 11:58)
 

innerHTML - свойство конкретного тега <div>.
Описывает всё то, что входит между символом > открывающего тега и символом < закрывающего.
По определению <div> и </div> этого конкретного тега после любых пертурбаций с innerHTML должны остаться на своих местах и по-прежнему должны принадлежать этому же конкретному тегу.

Своим скриптом Вы хотите создать новый тег <div>, не имеющий НИКАКОГО отношения к конкретному тегу, а лишь следующий за ним.

Браузер пытается исправить Вашу ошибку.

  Ответить  
 
 автор: moonfox   (23.06.2011 в 15:35)   письмо автору
 
   для: Абырвалг   (23.06.2011 в 14:37)
 

что делать ?)))
мне не подходит див внутри основного дива , мне после него ....

  Ответить  
 
 автор: Абырвалг   (23.06.2011 в 15:58)   письмо автору
 
   для: moonfox   (23.06.2011 в 15:35)
 

Кроссбраузерно будет так:
<script>
function show()
{
//создаём новый тег и заполняем его нужным текстом
var NewTag = document.createElement ('div');
var TextInNewTag = document.createTextNode ('yes');
NewTag.appendChild (TextInNewTag);

//определяем тег, ЗА которым будет следовать новый
var OldTag = document.getElementById ('d100')

//вставляем новый тег
OldTag.parentNode.insertBefore (NewTag, OldTag.nextSibling);
}
</script>
<div id="d100">
lol
</div>
<span onclick="show();">show</span>

И никогда не назначайте для id значение, начинающееся с цифры.
Пётр Великий - он "Пётр Первый", а не "Первый Пётр"

  Ответить  
 
 автор: 0987654   (23.06.2011 в 16:12)
 
   для: Абырвалг   (23.06.2011 в 15:58)
 

см. ответ

  Ответить  
 
 автор: moonfox   (23.06.2011 в 16:58)   письмо автору
 
   для: Абырвалг   (23.06.2011 в 15:58)
 

спасибо
все работает ,
один вопрос

почему
var TextInNewTag = document.createTextNode ('<p>yes</p>');
возвращает html сущности вместо тэгов?

  Ответить  
 
 автор: Абырвалг   (23.06.2011 в 17:24)   письмо автору
 
   для: moonfox   (23.06.2011 в 16:58)
 

Потому что метод createTextNode создаёт ТЕКСТ, что и видно из названия - createTextNode

Чтобы вставить HTML, можно воспользоваться как любимым Вами свойством innerHTML:
var NewTag = document.createElement ('div');
NewTag.innerHTML = '<p>yes</p>'; 

А можно и продолжить использовать DOM-методы:
var NewTag = document.createElement ('div');
var TagInNewTag = document.createElement ('p');
var TextInNewTag = document.createTextNode ('yes');
TagInNewTag.appendChild (TextInNewTag); 
NewTag.appendChild (TagInNewTag);

Второе - предпочтительнее, ибо работает быстрее.

  Ответить  
 
 автор: 0987654   (23.06.2011 в 23:38)
 
   для: Абырвалг   (23.06.2011 в 17:24)
 

См. ответ

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования