2

我正在与第三方库进行交互,该库要求我从函数中返回一个 DOM 元素:

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

这样做会导致库抛出错误:

未捕获的类型错误:对象 # 没有“替换”方法

但是,这样做效果很好:

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');
}
4

2 回答 2

2

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

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

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

$('.className')[0].outerHTML
$('#idName')[0].outerHTML
于 2013-10-26T02:56:40.703 回答
2

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

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

于 2013-10-26T03:07:16.753 回答