jQuery $()构造函数和以反斜杠开头的字符串

jQuery $() constructor and strings with a leading backslash

本文关键字:开头 字符串 构造函数 jQuery      更新时间:2023-09-26

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

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

$('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似乎不会引起任何问题。
为什么会这样呢?在$()中,斜杠有什么特殊的含义吗?

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

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

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

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

也可以这样分割:

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

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