2013-05-20 49 views
0

我在這個網站搜索了很多,並且有很多很好的答案,這是我第一次需要提問,因爲我找不到答案。存儲和調用[jquery]選擇器

我的腳本被注入用戶加載的頁面,所以這些頁面可能是完全任意的結構。頁面上總是會有一些特殊的文本,我希望下次訪問該頁面時能夠自動檢索這些文本(這是一個實時值,所以我很喜歡這個值)。

頁面非常隨意,我能做到的唯一方法是讓用戶雙擊該值以「訓練」腳本並檢測事件和被雙擊的元素。這工作正常,我可以檢索我想要的值,我有一個元素的jQuery對象。

我無法弄清楚如何存儲該元素(或者更確切地說是它的選擇器),這樣我可以在下次訪問該頁面時檢索數據,而無需雙擊它。

這裏是一個jsFiddle http://jsfiddle.net/troywray/YvSH9/如果你雙擊紅色文本,我想要的文本很容易檢索。但是我可以存儲什麼以便能夠在稍後再現選擇器?

$('body').bind("dblclick", function(event){ 
    var dblClickElement = $(event.target); 
    var specialText = dblClickElement.html(); 
    alert("I picked up: " + specialText); 
    console.log(dblClickElement); 
    console.log("selector result:", $(dblClickElement).selector); // empty string 
}); 

控制檯說,dblClickElement是一個對象[span.abcde]但它在螢火一個可點擊的對象。我想要的是字符串'span.abcde',所以我可以使用它來選擇未來。似乎並沒有jquery對象的屬性等於span.abcde

我以爲我在這裏發現了一些相關的東西:Get the current jQuery selector string?但它在這裏不起作用(證明是在小提琴中,我得到了爲什麼)。

我真的不想要解析內部/外部html建立選擇器字符串的建議 - 如果我必須這樣做,那麼毫無疑問,我可以弄清楚。

另外,我知道在很多情況下,選擇器可能不會給我一個唯一的元素,但我可以處理它。

+3

問題是 - 單個節點可能有許多選擇器。如果不遍歷DOM樹並構建您喜歡的選擇器,則無法將節點轉換爲選擇器。 – Dogbert

+0

你可以用DOM遍歷來手動構建選擇器,還是你想避免* all *遍歷/ HTML操作? –

+0

@Dogbert - 謝謝 - 好點。我想我正在考慮在jsFiddle中,*我*沒有告訴jQuery使用span.abcde,但是某些事情已經決定這是選擇器 - 而tag.class在這種情況下是一個很好的選擇器。我不應該說我必須有span.abcde。我只需要一個將返回一個或多個元素的選擇器,包括我真正想要的元素(我假設我可以獲取一個元素數組並確定哪個索引是我想要的元素,例如$('span')[4] –

回答

0

爲什麼不設置cookie?如果您只能在頁面加載後檢索文本,或者文本在服務器上可用,請讓服務器設置Cookie,那麼有一個用於該http://www.electrictoolbox.com/jquery-cookies/的jquery插件?

+0

不,交叉目的,我認爲。我可以發送一個選擇器回到服務器存儲沒有問題(我也可以使用cookie)。問題不在於選擇器的存儲/檢索,它將選擇器放在一個我可以使用的表單中,所以當將來我可以做同樣的頁面時(原則上)x = $(myStoredSelector).html() –

0

答案是從@Stephan指出的鏈接中使用頂級投票getPath函數。請注意,有另一個getPath函數的引用不適用於不明確的節點。

getPath給出一個可以保存以供將來參考的字符串,例如,

HTML>體> DIV>號碼:當量(2)> span.abcde

對於從I中使用的存儲路徑(未優化)在未來的查找元件:

var bits = path.split(">"); 
var currentElement = null; 
for (var k = 0; k < bits.length; k += 1) { 
    if (k === 0) { 
     currentElement = $(bits[k]); 
    } else { 
     currentElement = currentElement.children(bits[k]); 
    } 
} 
var desiredText = currentElement.html(); 

如尖這取決於@fnostro,這取決於使用之間保持不變的DOM結構,但對於我的應用程序來說這不是問題。