如果我要设置DOM中DIV元素的内容:
$("#myE").html(contents);
以上两者有任何区别吗:
$("#myE").attr('innerHTML', contents);
? 感谢!
$("#myE").html(contents);
以上两者有任何区别吗:
$("#myE").attr('innerHTML', contents);
? 感谢!
<div id="myE">
whatever the value of 'contents' is
</div>
<div id="myE" innerHTML="whatever_contents_value_is">
...
</div>
不同之处在于,你的第二个例子直接使用 innerHTML
属性将代码注入到 DOM 中,绕过了一些 jQuery 兼容层,在努力避免一些浏览器问题,特别是 IE 的情况下提供跨浏览器兼容性。
因此,jQuery 的 html()
方法始终是更好的解决方案。更不用说随着 jQuery 1.6 的引入,属性和属性处理方式发生了巨大变化,如果你决定从 jQuery 1.5.x 切换到 1.6.x,你的代码将完全不兼容。曾经历过这种情况。
我认为在内部调用innerHTML时,html()没有任何区别:
html: function( value ) {
if ( value === undefined ) {
return this[0] && this[0].nodeType === 1 ?
this[0].innerHTML.replace(rinlinejQuery, "") :
null;
// See if we can take a shortcut and just use innerHTML
} else if ( typeof value === "string" && !rnocache.test( value ) &&
(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
value = value.replace(rxhtmlTag, "<$1></$2>");
try {
for ( var i = 0, l = this.length; i < l; i++ ) {
// Remove element nodes and prevent memory leaks
if ( this[i].nodeType === 1 ) {
jQuery.cleanData( this[i].getElementsByTagName("*") );
this[i].innerHTML = value;
}
}
// If using innerHTML throws an exception, use the fallback method
} catch(e) {
this.empty().append( value );
}
} else if ( jQuery.isFunction( value ) ) {
this.each(function(i){
var self = jQuery( this );
self.html( value.call(this, i, self.html()) );
});
} else {
this.empty().append( value );
}
return this;
},
这个片段来自于jQuery源代码
希望这有所帮助
$("#myE").html(contents);
。我以前使用过'attr'函数来设置属性的值,或者在HTML元素上创建属性。 - Joeblackdev