【问题标题】:Jquery String + Object + StringJquery 字符串 + 对象 + 字符串
【发布时间】:2024-05-18 07:40:02
【问题描述】:

我有一个似乎无法解决的小问题。

这里...我有一个像这样创建的输入...

var input = $('<input/>');

如果我这样做......一切都很好

$(this).append(input);

如果我这样做......

$(this).append('<div>' + input + '</div>');

它附加一个带有html [object Object]的div

有人可以指导我正确的方向吗?

提前谢谢你!

【问题讨论】:

  • + 用于连接字符串。 input 是一个 jQuery 对象,而不是字符串。
  • 我知道这是问题所在,只是不确定是否有将对象转换为字符串的函数。

标签: javascript jquery string object


【解决方案1】:

你可以

$('<div />').append(input).appendTo(this);

演示:Fiddle

问题是input是一个jQuery对象,所以当你在字符串连接中使用它时,它会导致[object Object](默认toString()是一个对象);


或者

var input = $('<input/>');
$('<div />', {
    append: input
}).appendTo(this);

演示:Fiddle

【讨论】:

  • 有没有把对象转成字符串的方法或函数?
  • @VIDesignz see this answer by trueblueaussie- 如果你想要它作为一个字符串那么你为什么要创建它作为一个 jQuery 对象
  • 我发现创建为对象更容易,但您的问题是有效的。创建元素时只使用对象而不是字符串是否可取?
  • @VIDesignz 我主要使用对象...但最后我会使用该对象而不是生成的字符串...否则我会尝试直接使用字符串生成标记
  • @VIDesignz 为什么要使用 html 进行连接,以便轻松使用对象本身
【解决方案2】:

您需要使用所有字符串或所有 jQuery 对象:

例如

$(this).append($('<div>').append(input));

$(this).append('<div>' + input[0].outerHTML + '</div>');
// I think this version is ugly :)

注意事项:

  • $('&lt;div&gt;') 创建一个新的 jQuery DOM 元素,然后可以附加子内容。
  • input[0].outerHTML 将返回等同于 DOM 对象 HTML 的文本字符串

【讨论】:

  • 我不认为input.html() 会起作用,因为.html() 会返回innerHTML...input 元素没有innerHTML
  • @Arun P Johny:是的,太快了。已更正(虽然是可怕的解决方案)
  • 尽管所有其他答案几乎相同,但我正在寻求一种可以将对象转换为字符串的解决方案。似乎是这样。
  • 没有那么漂亮,但是 DOM outerHTML 可以解决问题。祝你的项目好运。