$('<div>')[0]和<div> </div>?</div>之间的差异

时间:2013-10-26 02:49:43

标签: javascript jquery

我与第三方库交互,要求我从函数中返回DOM元素:

option: function () {
    var option = $('<div>');
    return option[0];
}

执行此操作会导致库抛出错误:

  

未捕获的TypeError:对象#没有方法&#39;替换&#39;

然而,这样做很好:

option: function () {
    return '<div>' + '</div>';
}

我认为这两个表达方式是相同的,但显然它们不是。我如何使用jQuery语法,但是以与第二个语句相同的方式表达结果?

作为参考,这里是导致此问题的第三方代码片段:

// render markup
html = self.settings.render[templateName].apply(this, [data, escape_html]);

// add mandatory attributes
if (templateName === 'option' || templateName === 'option_create') {
    html = html.replace(regex_tag, '<$1 data-selectable');
}

2 个答案:

答案 0 :(得分:2)

如果你需要一个字符串,你可以尝试这样的东西来创建一个新的jquery元素并返回字符串:

$('<div>')[0].outerHTML

或通过选择器引用现有元素

$('.className')[0].outerHTML
$('#idName')[0].outerHTML

答案 1 :(得分:2)

它们甚至不相同。 '<div>' + '</div>'(与'<div></div>'相同,但可能是您的真实代码更复杂)只是一个字符串。不是XML DOM对象(节点,元素,任何东西)。只是一个普通的花园品种。

现在,'<div>'也是一个字符串,但是当你将它传递给jQuery的$函数时,你得到的是一个表示实际<div> DOM元素的对象。完全不是一个字符串。