预计,以下jQuery将从html创建节点:
var nodes = $( "<li>ABC</li><li>DEF</li>" );
现在,请考虑以下html:
<ul class="foo">
<li>ABC</li>
<li>DEF</li>
</ul>
我的问题是,为什么以下内容会返回错误消息而不是节点?
var html = $( "ul.foo" ).html();
var nodes = $( html );
错误消息是:
Uncaught Error: Syntax error, unrecognized expression: <li>ABC</li>
<li>DEF</li>
您可以在此处查看http://jsfiddle.net/HDk47/
答案 0 :(得分:4)
jQuery的解析启发式方法与html
中的前导空格不同。
删除空格可以解决问题:
var html = $.trim( $( "ul.foo" ).html() );
<强> Updated fiddle 强>
更新:Felix Kling dug up documentation reference之前的方式。
答案 1 :(得分:0)
参考http://jquery.com/upgrade-guide/1.9/#jquery-htmlstring-versus-jquery-selectorstring,“从1.9开始,如果字符串以小于(”&lt;“)字符开头,则该字符串仅被视为HTML。”
var html = $( "ul.foo" ).html();
html = html.replace(/^[ \r\n\t]+/g,'');//remove leading whitespace
var nodes = $(html);
答案 2 :(得分:-3)
错误在于:
var html = $( "ul.foo" ).html();
var nodes = $( html );
而是这样:
var html = $( "ul.foo" ).html();
var nodes = $( html );
我测试了它并且有效