[学习笔记] 使用$()代替document.createElement()创建新元素的简便方法

原创 分界线 教程 js 234阅读 2017-05-11 11:27:16 举报

今天偶然看到一段代码:

$('<a/>',{'data-href':'xxx', onclick:foo(arr);'}).html($.trim(v))
执行后生成了一个a标签!!
jq基础没打牢的我瞬间懵逼了:这是什么怪用法,创建元素可以这样玩?
赶紧翻开w3school找找看,果然有介绍:

如果以参数的形式将字符串传递给 $(),jQuery 会检查字符串是否是 HTML (比如,字符串某些位置存在标签)。如果不是,则把字符串解释为选择器表达式。但如果字符串是 HTML 片段,则 jQuery 试图创建由该 HTML 片段描述的 DOM 元素。然后会创建并返回一个引用这些 DOM 元素的 jQuery 对象:
jQuery( html, [ ownerDocument ] )可以用于创建新元素
实例:

$("<p id="test">My <em>new</em> text</p>").appendTo("body");
如果 HTML 片段比不含属性的简单标签更复杂,如同上面例子中的 HTML,那么元素实际的创建过程是由浏览器的 innerHTML 机制完成的。具体地讲,jQuery 会创建新的 <div> 元素,然后为传入的 HTML 片段设置元素的 innerHTML 属性。当参数只是简单的标签,比如$("<img />") 或 $("<a></a>"),jQuery 会通过内生的 JavaScript createElement() 函数来创建元素。
要确保跨平台兼容性,片段的结构必须良好。能够包含其他元素的标签必须成对出现(带有关闭标签):
$("<a href="http://jquery.com"></a>";);
不过,jQuery 也允许类似 XML 的标签语法:
$("<a/>");
无法包含其他元素的标签可以关闭,也可以不关闭:
$("<img />");
$("<input>");

还可以设置属性和事件:
jQuery(html,props)
实例:创建一个 <input> 元素,同时设定 type 属性、属性值,以及一些事件。
[quote]$("<input>", {
type: "text",
val: "Test",
focusin: function() {
$(this).addClass("active");
},
focusout: function() {
$(this).removeClass("active");
}
}).appendTo("form");[/quote]

新技能get

评论 ( 1 )
最新评论