如何访问jQuery.post返回的特定元素的HTML

时间:2015-07-09 08:46:59

标签: javascript jquery

我有一个网页,当用户点击某个特定元素时,会触发一个javascript函数,该函数使用$ .post()(即jquery)将用户的数据发送到修改数据库的PHP脚本。 成功后,PHP页面只会打印

<p id='success'>Yay!</p>

失败时,会打印:

<p id='failure'>$some_error_message</p>

$ .post的回调部分会检查其中哪一个存在。成功时,它只显示现有(当前隐藏)元素。失败时,我想抓住$ some_error_message位,并把它放在我的页面上。

我找到了一种方法(如下所示),但它很笨重 - 我确信当我只想访问单个元素时,我不应该使用“.each”函数。有没有更好的方法呢?

$.post('myURL.php', myData, function(retData)
{
  if ( $(retData).filter('#success') )
  {
     $('#mySuccessDiv').show(200);
  }
  else if ($(retData).filter('#failure') )
  {
    $(retData).filter('#failure').each(function()
    {
       $('#myErrorDiv').html($(this).html());
    });
  }
  else
    $('#myErrorDiv').html("Unspecified Error");
}, "html");

正如我所说,使用.each似乎很浪费,但我不能简单地使用

$('#myErrorDiv').html($(retData).filter('#failure').html());

因为.filter返回一系列对象。但同样,我无法弄清楚如何只访问元素0(因为我在ID上过滤,只能有一个匹配)。我试过了:

$('#myErrorDiv').html($(retData).filter('#failure')[0].html());

但它并不喜欢。

我被迫使用.each,还是我真的很钝?

1 个答案:

答案 0 :(得分:2)

.filter()将返回一个jQuery对象(带或不带任何元素),所以它总是很简单,看它是否返回了你需要检查返回的jQuery对象长度的任何元素

$.post('myURL.php', myData, function (retData) {
    var $obj = $(retData);
    if ($obj.filter('#success').length) {
        $('#mySuccessDiv').show(200);
    } else if ($obj.filter('#failure').length) {
        $('#myErrorDiv').html($obj.html());
    } else {
        $('#myErrorDiv').html("Unspecified Error");
    }
}, "html");

另一种解决方案是使用.is()

$.post('myURL.php', myData, function (retData) {
    var $obj = $(retData);
    if ($obj.is('#success')) {
        $('#mySuccessDiv').show(200);
    } else if ($obj.is('#failure')) {
        $('#myErrorDiv').html($obj.html());
    } else {
        $('#myErrorDiv').html("Unspecified Error");
    }
}, "html");