Javascript Jquery-选择器$(<;div>;)和$(<;div/>;)差异
将附加到元素与Javascript Jquery-选择器$(<;div>;)和$(<;div/>;)差异,javascript,jquery,append,Javascript,Jquery,Append,将附加到元素与 $('#my_parent_element').append('<div>'); $('my#u parent_element')。追加(''; 或 $('my#u parent_element')。追加($(''); 及 $('my#u parent_element')。追加(''; 或 $('my#u parent_element')。追加($(''); 此斜杠的用途是什么 使用$将此元素转换为jQuery元素的目的是什么 为什么jQuery能
$('#my_parent_element').append('<div>');
$('my#u parent_element')。追加('';
或
$('my#u parent_element')。追加($('');
及
$('my#u parent_element')。追加('';
或
$('my#u parent_element')。追加($('');
此斜杠的用途是什么
使用$
将此元素转换为jQuery元素的目的是什么
为什么jQuery能够以这种方式附加元素?一个是完整有效的代码,保证现在和将来在所有浏览器中都能工作,另一个是不完整的,在某些边缘情况下可能无法工作 为了清楚起见,您需要
'
jQuery只能创建/操作元素,不能打开和关闭标记。一旦在DOM中进行处理,元素就不再由开始和结束标记表示,而是在树结构中表示为节点
就.append(“”
与.append($(“”))
而言,两者之间几乎没有区别。两者执行相同的操作
api中详细记录了“
vs”
“
vs”
是一个非常简单的例子,无论是现在还是将来,“应该”都可以在所有浏览器中使用,但是如果您变得更复杂,您就会遇到跨浏览器html解析方式差异的问题。我认为这4个选项之间没有太大区别。jQuery在处理发送的参数时非常灵活
当只有一个标签时,它们之间没有区别
但是,您应该了解以下两者之间的区别:
<div><span class="inner"> and <div/><span class="inner"/>
和
第一个生成:
<div><span class="inner"></span></div>
第二个:
<div></div><span class="inner"></span>
是一样的:
构造函数方法中的From
// Match a standalone tag
rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
//cut
if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
// Assume that strings that start and end with <> are HTML and skip the regex check
match = [ null, selector, null ];
}
//cut
// scripts is true for back-compat
selector = jQuery.parseHTML( match[1], doc, true );
if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
this.attr.call( selector, context, true );
}
// cut
}
//CUT
parseHTML: function( data, context, scripts ) {
// Single tag
if ( (parsed = rsingleTag.exec( data )) ) {
return [ context.createElement( parsed[1] ) ];
}
}
//匹配独立标记
rsingleTag=/^(?:|)$/,,
jQuery.fn=jQuery.prototype={
构造函数:jQuery,
init:函数(选择器、上下文、rootjQuery){
//削减
if(selector.charAt(0)==“”&&selector.length>=3){
//假设以开头和结尾的字符串是HTML,并跳过正则表达式检查
匹配=[null,选择器,null];
}
//削减
//脚本对于后端兼容是正确的
选择器=jQuery.parseHTML(匹配[1],doc,true);
if(rsingleTag.test(match[1])&&jQuery.isPlainObject(context)){
this.attr.call(选择器、上下文、true);
}
//削减
}
//削减
parseHTML:函数(数据、上下文、脚本){
//单标签
if((已解析=rsingleTag.exec(数据))){
返回[context.createElement(已解析[1]);
}
}
正如您可以看到的那样,rsingeltag
regexp同时匹配
和
,并且第一个控件只检查字符串长度>=3的开始
和结束代码>字符
parseHTML方法再次执行regexp,因此选择器是标记的名称。我不是说你错了,但是为了完整起见,
[需要引用]
。可能是从这里开始的……在“vs”的特殊情况下但是没有区别,例如,'
可能会导致在不同的浏览器中生成不同的节点。
代码如何有效?哪个HTML doctype会认为这是有效的?@user1689607我使用的是valid,它的有效性在于,无论它在HTML字符串中的哪个位置,每个浏览器都会对它进行相同的处理(在合理范围内)@user1689607:如果您不是在向jQuery传递字符串时询问字符串,而是在标记有效性方面,那么所有类型的HTML都将其视为有效的..可能重复的+1,因为您是对的,它是相同的。尽管文档比源代码更具权威性。文档显示这两种形式被认为是平等的。我在你的评论之前编辑过:-)你是对的,我实际上有点不同意你的编辑。文档允许
和
两种形式。一种形式并不比另一种更有效。“当参数有一个标记(带有可选的结束标记或快速结束标记)-$('')或$('')
,$('')
或$('')
-jQuery创建元素…”mmmh我不确定…当参数有单个标记(带可选关闭标记或快速关闭)-$('')或$(''),$('')或$('')
时(带可选关闭).Yep,这就是我的意思。它们明确地允许两种形式。关键是jQuery在创建单个元素时可以识别3种语法类型。因此,这实际上不是HTML有效性的问题,而是jQuery API的要求。
<div><span class="inner"></span></div>
<div></div><span class="inner"></span>
// Match a standalone tag
rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
//cut
if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
// Assume that strings that start and end with <> are HTML and skip the regex check
match = [ null, selector, null ];
}
//cut
// scripts is true for back-compat
selector = jQuery.parseHTML( match[1], doc, true );
if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
this.attr.call( selector, context, true );
}
// cut
}
//CUT
parseHTML: function( data, context, scripts ) {
// Single tag
if ( (parsed = rsingleTag.exec( data )) ) {
return [ context.createElement( parsed[1] ) ];
}
}