2013-07-31 96 views
0

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

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

FYI“这种”在这种情况下似乎是阵列,其中每个项目是一个字符,所以在检查器,它没有显示“我的讯息”,但字符串对象:

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

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

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

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

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

+0

为什么你想追加一个空字符串到这..这应该做权'var messageTest = this; ' –

+0

@ Sushanth - 这是我的黑客得到字符串对象的原始值...但自从发现你可以做eval(this.valueOf())...没有测试过它虽然 –

回答

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的文本,这将等于原始字符串等。

+0

@ adeneo--你摇滚!这是完美和干净的。谢谢! –

0

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

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

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

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

这对客户端系统来说也更快,因为它的原生对象为javascript和jquery,使用$ .getJSON具有出色的JSON支持。