簡體   English   中英

如何訪問jQuery.post返回的特定元素的HTML

[英]How to access HTML of a specific element returned by jQuery.post

我有一個網頁,當用戶單擊特定元素時,將觸發一個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,還是我真的很鈍?

.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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM