[英]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.