是否可以从.html()返回的html创建元素?

时间:2013-06-12 13:08:01

标签: jquery

预计,以下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/

3 个答案:

答案 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 );

我测试了它并且有效