0

我有一个通用函数来显示 AJAX 调用导致的错误。其中一些消息是 HTML 字符串,我想将其转换为 DOM 对象,然后使用 .find() 搜索其中的元素。其他将只是字符串(不是 HTML)。在这种情况下,我不知道如何处理......它正在生成异常。

var messageTest = "" + this;
if ($(messageTest).length == 0) {
    message += this;
} else {
    message += $(messageTest).find('.message-error').html();
}

仅供参考,在这种情况下,“this”似乎是一个带有数组的 String 对象,其中每个项目都是一个字符,因此在检查器中,它没有显示“我的消息”,而是:

[0]: "m"
[1]: "y"

ETC

当它只是一个不是 HTML 的字符串时,我在 if 语句行收到错误:

Uncaught Error: Syntax error, unrecognized expression:<The contents of messageText>

那么当输入可能是 HTML 字符串或只是一个字符串时,我该如何优雅地处理呢?

注意...最后,我只想要字符串,因为我将把它包装在它自己的 HTML 中。

4

3 回答 3

1

如果它是一个字符串或 HTML,它总是可以附加到一个元素,然后排序出来:

var msg = $('<div />').append(this),
    err = msg.find('.message-error'),
    txt = err.length ? err.text() : msg.text();

message += txt;

将字符串或 HTML 附加到空 div,如果 div 包含.message-error元素,则获取该元素的文本,否则获取 div 的文本,这将等于原始字符串等。

于 2013-07-31T22:54:43.383 回答
0

我知道这并不能回答你的问题,但我觉得你想要的可以通过稍微改变方法来更好地实现。

如果您可以控制发送这些响应的服务器,我建议您将它们作为 JSON 对象发送回来,如果您将每个结果都设为 JSON 对象,那么您可以在与消息一起返回的对象中将错误属性设置为 true/false值与您的 HTML 或错误消息。

这在客户端系统上也更快,因为它是 javascript 和 jquery 的本机对象,使用 $.getJSON 具有出色的 JSON 支持。

于 2013-07-31T22:51:08.383 回答
0

一种非常接近您所拥有的方法是捕获异常,在这种情况下,考虑它是一个字符串(假设this包含响应字符串):

var messageString = this;
var messageDOM;
try {
    messageDOM = $(messageString);
} catch(ex) {
    // If we got here, messageString is not HTML
    messageDOM = $('<div/>').text(messageString);
}   
于 2013-07-31T22:49:21.420 回答