Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating an empty element with start tag vs. self closing tag

Tags:

jquery

In jQuery, is there any difference between this:

$('<div>').appendTo('body');

And this:

$('<div />').appendTo('body');

I've always seen it the "self closing" way, but I came across the first way being used in some production code without errors. Any chance this will cause problems down the line, or is this an acceptable practice?

like image 221
Luke The Obscure Avatar asked May 25 '12 15:05

Luke The Obscure


2 Answers

The documentation says:

When the parameter has a single tag, such as $('<img />') or $('<a></a>'), jQuery creates the element using the native JavaScript createElement() function.

It also says:

Tags that cannot contain elements may be quick-closed or not

So, the form $('<div>') apparently works also, but it's undocumented. It's clear from the documentation that the intention is that a tag that needs a closing tag should either have that closing tag, or be self-closed.

I would stick to the documented version, as that is less likely to be a victim of a breaking change in a future version.

<rant>
The jQuery library have a habit of putting as much as possible in a single function call (see the recent on addition for an example), so it's not so far fetched that they would invent something new to happen when you use a non-self-closing tag...
</rant>

like image 74
Guffa Avatar answered Nov 18 '22 12:11

Guffa


No. Neither this $("<div>") nor this $("<div />") will cause problems.

The proof is so that if we go to jQuery sources we can see that in case of selector with single tag syntax <...> it parses selector with this regular expression:

rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/

where only the symbolic part is used for createElement and closing slash can be optional.

like image 6
VisioN Avatar answered Nov 18 '22 12:11

VisioN