如何处理失败的JQuery DOM转换

How to handle failed JQuery DOM conversion

本文关键字:JQuery DOM 转换 失败 何处理 处理      更新时间:2023-09-26

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

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

仅供参考,在这种情况下,"this"似乎是一个String对象,它有一个数组,其中每个项都是一个字符,所以在检查器中,它不会显示"my message here",而是:

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

etc

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

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

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

注意。。。最后,我只想要这个字符串,因为我要用它自己的HTML来包装它。

如果它是字符串或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的文本,该文本将等于原始字符串等。

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

var messageString = this;
var messageDOM;
try {
    messageDOM = $(messageString);
} catch(ex) {
    // If we got here, messageString is not HTML
    messageDOM = $('<div/>').text(messageString);
}   

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

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

这在客户端系统上也更快,因为它是javascript的本地对象,jquery使用$.getJSON.

具有出色的JSON支持