JQuery автоматически закрывает теги при добавлении? например $ ( "<Р />") - PullRequest
11 голосов
/ 30 марта 2012

Я видел это в некотором коде:

$("<p/>").append("<div>something</div>").appendTo("body");

и заметил, что он автоматически закрыл тег p в сгенерированном HTML:

<p><div>something</div></p>

Я никогда раньше не видел синтаксис селектора $("<p/>").Это ошибка (а Chrome просто догадывается, какой она должна быть) или это особенность синтаксиса селектора jQuery?

Ответы [ 4 ]

8 голосов
/ 30 марта 2012

Функция $ сильно перегружена, даже имея две функции для строк. Если строка является селектором CSS, она вернет объект, содержащий соответствующие элементы из документа. Если вы откроете с помощью <, он создаст элемент. Однако jQuery не создает тег . Элементы принадлежат DOM, теги принадлежат HTML, который является сериализацией DOM.

$("<p/>")  //Creates a p element
    .append("<div>something</div>") //inserts a child element, which is a div you created
                                    //containing the string "something"
    .appendTo("body"); //tags the newly created paragraph element, with its div child
                       //and inserts it into the DOM as a child of the body element.

Когда вы сериализуете документ, вы получите:

<body><p><div>something</div></p></body>

, который показывает каждый элемент, содержащий его дочерние элементы.

<Ч />

Если ваша разметка выглядит следующим образом: <p/><div>something</div>, то элементы p и div являются братьями и сестрами . Это произошло бы, если бы они были добавлены к одному и тому же родителю:

//Use add to create a new element and add it to the jQuery collection object
//instead of appending it as a child to the p element.
$("<p/>").add("<div>something</div>").appendTo("body");
6 голосов
/ 30 марта 2012

это функция, и jQuery правильно отображает тег.

4 голосов
/ 30 марта 2012

Особенность jQuery - посмотрите, что произойдет, если вы по умолчанию сделаете самозакрывающийся тег, например, ссылку

$("<link/>").append("<div>something</div>").appendTo("body");

Генерирует

<link><div></div></link> 

что явно не так. Но это то, что его просят сделать!

2 голосов
/ 30 марта 2012

<p/> - это ярлык для <p></p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...