2013-04-26 33 views
1

一個簡單的問題關於使用context與jQuery選擇:jQuery選擇 - 使用HTML片段作爲過濾器「上下文」,找到

我想抓住從具有id="time"一個div元素中的文本。可以在HTML代碼段被用作context如下:

// An AJAX request here returns a HTML snippet "response": 

var myTime = $("#time", response).text(); 

的原因,我這樣做是我想從response舉行的HTML中的time變量,但不希望加載的開銷所有的HTML都先進入DOM。 (這是一個大量的HTML)。

+0

不根據文檔:http://api.jquery.com/jQuery/#jQuery-selector-context。 – 2013-04-26 10:56:59

+0

好吧,夠公平的,但是你知道一個替代方法在html代碼片段中使用JQuery選擇器而不首先加載到div中嗎? – WheretheresaWill 2013-04-26 11:14:40

回答

1

從評論我的理解是響應是<span id="time">blah blah</span>這意味着元素time本身是根變量,這就是爲什麼子查找不起作用。

var response = '<span id="time">blah blah</span>'; 
var myTime = $(response).text(); // Or $(response).filter("#time").text(); 
alert(myTime) 

演示:Fiddle

此方法使用filter()而非find(),區別在於:

filter() - 通過搜索所傳遞的元素集

find() - 通過所有的子搜索僅限於元素。

+0

是的,我意識到我的代碼與此相當,但它仍然不起作用! – WheretheresaWill 2013-04-26 11:16:43

+0

@Wheretheresa在這裏似乎很好http://jsfiddle.net/arunpjohny/rccLL/,你可以分享如何加載HTML和HTML內容 – 2013-04-26 11:20:36

+0

http://jsfiddle.net/rccLL/1/是我的更新版本用雙引號而不是單引號 - 這種改變不再有效! – WheretheresaWill 2013-04-26 11:24:40

0

你試過了嗎?

$("#time", "<div><span id=time></span></div>")[0].id //returns 'time' 

從jQuery的源代碼:

// HANDLE: $(expr, context) 
// (which is just equivalent to: $(context).find(expr) 
} else { 
    return this.constructor(context).find(selector); 
} 

所以有效的選擇應該在上下文參數工作。就個人而言,我更喜歡使用find開始,因爲它使所有選擇器保持在同一順序而不是$("second > third", "first");

+0

我試着用我的ajax請求中的'response',它是未定義的...我的響應和常規字符串之間必定有一些區別... – WheretheresaWill 2013-04-26 11:27:49