2011-06-24 35 views
1

我被困在jQuery的宇宙角落,可以肯定使用一些幫助。getelementsbyname(在Ajax html響應中)當我有部分名稱時。

總之,我使用jQuery(GET)進行Ajax調用,並獲得一個XHTML頁面作爲響應。在響應中(其中包括<html>,<head><body>標籤等)中有一個輸入元素,我只知道其中的部分名稱。我需要獲得與響應一起出現的這個隱藏輸入字段的值。

p.s.我無法控制html響應的樣子,所以我無法重新格式化它。 這些文件必須包含的jquery.js文件夾中

(今日最新版本)這是我想出這麼遠。

Page1.html(使Ajax調用,並得到響應page2.html)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head> 
     <title>runthis</title> 

     <script type="text/javascript" language="javascript" src="jQuery.js"></script> 

     <script tyle="text/javascript"> 
     $(document).ready(function(){ 
       $('input').click(function(){ 
         $.ajax({ 
           type : "GET", 
           url : 'page2.html', 
           dataType : "html", 
           success: function(data) { 
            alert($(data).filter('input[name*="test"]').value); 
           }, 
           error : function() { 
             alert("Sorry, The requested property could not be found."); 
           } 
         }); 
       }); 
     }); 
     </script 

</head> 
<body> 
     <input type="button" value="load" /> 
</body> 
</html> 

Page2.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head> 
     <title>TiTlE</title> 

</head> 
<body> 
     <input type="hidden" name="1-test" value="123" /> 
     <input type="hidden" name="some-other-name" value="456" /> 
     <input type="hidden" name="yet-another-name="789" /> 
</body> 
</html> 

因此,在這些例子中,我需要得到 「123」 作爲答案。

如果有人能指出我的錯誤並幫助我完成這項工作,我將不勝感激。我花了幾個小時瀏覽網頁,我的所有Google搜索結果都標記爲可見:),但仍無法實現。

回答

0

filter()返回一個jQuery對象,而不是一個DOM元素,所以你必須使用val()方法,而不是value屬性:

alert($(data).filter('input[name*="test"]').val()); 
+0

我剛試過這個,我弄不明白! – Amir

+0

我剛剛意識到你的標記是無效的:''是一個語法錯誤,這可能是問題的原因 –

+0

哦,那是我的不好,但它不是問題!測試! – Amir

0

我只是複製您的設置,發現您需要TOR兩個問題解決這個問題。

兩者都是在這條線:

alert($(data).filter('input[name*="test"]').value); 

首先,它應該結束.val()

其次,你所要求的一個子集的值。選擇第一個匹配並返回該值:

alert($(data).first('input[name*="test"]').val()) 
+0

爲什麼會這樣沒有意義?此外,爲什麼在爲文檔添加標記之後做更多*感覺做同樣的事情? –

+0

你說得對,我在考慮多個匹配結果,但是我的代碼會出現同樣的問題。現在編輯... – Chris

+0

再次測試,我的設置返回結果,他的設置返回'undefined',對於爲什麼,但上面的工作正常,請打開建議。 – Chris