如何处理失败的JQuery DOM转换
How to handle failed JQuery DOM conversion
我有一个通用函数来显示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.
相关文章:
- php:打印javascript/jquery dom就绪
- 表单中的 jQuery DOM 不会在 for 循环中更新
- 迭代 coffeescript 中的 jQuery DOM 元素: $(@).捷径
- 向一个jQuery/DOM元素添加一个函数
- jQuery DOM就绪,JavaScript执行
- 即使使用jQuery DOM就绪事件,也无法调用null的方法addEventListener()
- jQuery DOM遍历子菜单子菜单
- Javascript 和 JQuery dom 全局变量范围
- Jquery DOM Manipulation Somenthing比这更好
- 尝试在不使用 jQuery dom ready 函数的情况下传入变量
- jQuery DOM 遍历而不重新加载页面
- 简化 jQuery DOM 请求
- jQuery DOM Insertion with variable insert-method
- 如何对jQuery“DOM”类进行原型设计
- jquery dom insert and selector
- Google Maps API v3 选择信息窗口作为 jquery DOM 对象
- AngularJS 指令和 jQuery DOM 事件绑定
- 选中复选框的 Jquery DOM 设置适用于真而不是假
- HTML DOM和jQuery DOM放在一行中
- 如何处理失败的JQuery DOM转换