1

请看一下这段代码:http: //jsfiddle.net/Bkdgr/1/
它不起作用。但是,以下两个修改中的任何一个都可以使其正常工作:

将纯newItem字符串传递给append,而不是用 包装它$()

$('button').on('click', function(e){
    e.preventDefault();
    var newItem = '\
        <li>Hello, \
        World!</li>';
    $('ul').append(newItem);
});


将开始<li>标记向上移动到字符串定义的第一行:

$('button').on('click', function(e){
    e.preventDefault();
    var newItem = '<li>Hello, \
        World!</li>';
    $('ul').append($(newItem));
});


<li>当我向上移动到与前导相同的行\(但不删除\) 时,它也不起作用。
对我来说,构造函数似乎在字符串定义$()的前导方面存在一些问题。\将纯字符串(没有$()包装器)传递给append似乎不会引起任何问题。
为什么它会这样工作?前导斜杠在 中是否有任何特殊含义$()

4

2 回答 2

3

jQuery 解析的 html 字符串$()不能有前导空格或换行符/返回字符,甚至只能是纯文本。这记录在 api 中。

http://api.jquery.com/jQuery/#jQuery2

如果是 HTML 字符串,则必须以 html 标记开头。.append()并且.html()不那么严格,因为传入的字符串不能被解析为 css 选择器。

于 2013-04-18T20:53:01.993 回答
0

您需要决定是否要使用 $() 作为构造函数。如果是这样,您需要提供标签作为字符串中的第一个元素。它还会检查关闭标签并在需要时添加它。如果您需要代码才能工作,如果您提供自定义 HTML 代码,请不要使用构造函数: $('ul').append(newItem).

你也可以这样划分:

    $('button').on('click', function(e){
        e.preventDefault();
        var newItem = '\
            Hello, \
            World!';
        $("<li>").html(newItem).appendTo("ul");
    });

你需要玩 jQuery 而不是反对它:)

于 2013-04-18T21:53:32.510 回答