javascript
  • jquery
  • html
  • dom
  • 2012-06-19 3 views 0 likes 
    0

    Я узнал, что jQuery не всегда создает правильный DOM из строки HTML. Вот небольшой пример кода:jQuery строит неправильную DOM из строки HTML

    var x = "<div><p><ul><li>1</li></ul></p></div>"; 
    console.log('x = ' + x); 
    console.log('jQuery(x) = ' + jQuery(x).html()); 
    var y = "<div><div><ul><li>1</li></ul></div></div>"; 
    console.log('y = ' + y); 
    console.log('jQuery(y) = ' + jQuery(y).html()); 
    

    Вот выход я получаю это работает с JQuery 1.7.1:

    x = <div><p><ul><li>1</li></ul></p></div> 
    jQuery(x) = <p></p><ul><li>1</li></ul><p></p> 
    y = <div><div><ul><li>1</li></ul></div></div> 
    jQuery(y) = <div><ul><li>1</li></ul></div> 
    

    Как вы можете видеть, второй пример создает правильный DOM, первый пример нет. Единственная разница - это тег <p> вместо <div>. Это ошибка или функция jQuery?

    +0

    Вы указываете неверный html. Это неверный вход, а не вывод. Html, который вы видите в результате, является автоматически скорректированным html. – Nope

    +0

    @downvoter: Серьезно? Это хороший вопрос. Продвижение для противодействия. –

    ответ

    8

    Это возможно браузер nuance, since <ul> elements are illegal in <p> elements.

    Что происходит, так это то, что, когда jQuery пытается создать элементы HTML в вашей строке, как он ее понимает, браузер «автоматически исправляет» HTML, сгенерированный с помощью jQuery.

    +0

    Yepper, это, скорее всего, это. –

    +0

    Thats it, попробуйте прямо; 'document.body.innerHTML = x; alert (document.body.innerHTML) ' –

    Смежные вопросы