下面的代码总是将$('.ErrorMessage', result).length
返回为0.我不明白为什么。想法?
$.ajax({
type: "POST",
url: action,
dataType: "html",
data: serializedForm,
success: function (result) {
if ($('.ErrorMessage', result).length > 0) {
$('#editSurveyModal').append(result);
}
else {
alert('fail');
}
},
error: function (request, status, error) {
alert('save fail');
}
});
<div id="ErrorMessage" class="ErrorMessage">
<div>
Please correct the following errors before saving.
</div>
<div style="text-align: left">
<ul>
<li>Test</li>
</ul>
</div>
</div>
我试图通过在结果中的某处检查ErrorMessage类来查看结果是否是上面的错误部分视图。
答案 0 :(得分:2)
您可以使用jQuery首先从结果中实例化DOM元素(将它们添加到容器中),然后检查:
$('.ErrorMessage', $("<div/>").html(result)).length
答案 1 :(得分:2)
我曾经自己处理过同样的问题。
您不能.find()
它,因为您要查找的元素位于集合的根级别。
(请注意,$(selector, result);
是$(result).find(selector);
)的简写语法
但是,.filter('.ErrorMessage')
会匹配它,就好了。
(顺便提一下,当您将整个HTML文档传递到jQuery()函数时会遇到同样的问题 - 然后<html>
,<head>
和<body>
元素被剥离程。)
你应该做什么(抓住大多数/所有边缘案例)如下:
if ( $( '.ErrorMessage', $('<div/>').html( result ) ).length > 0 )
...
......鲍勃是你的叔叔。 : - )
答案 2 :(得分:1)
您可以直接处理结果变量(作为字符串),只需使用正则表达式在其中查找字符串“ErrorMessage”:
result.match('/ErrorMessage/')
答案 3 :(得分:0)
您的返回值是有效的xml,因此您可以使用“xml”作为dataType并获取文档(如果使用“html”,则获取字符串)