2010-09-01 193 views
13

我正試圖爲我在CMS中使用的TinyMCE製作一個簡單的圖像瀏覽器。作爲其中的一部分,我需要檢測用戶是否選擇了現有圖像,因此我可以顯示「編輯」表單而不是「選擇圖像表單」。如何使用jQuery在變量中選擇元素?

var selected_html = ed.selection.getContent(); 
var $elem = $(selected_html); 
console.log($elem); 

第一個函數將用戶從編輯器窗口中選擇的文本作爲HTML字符串返回。然後我想使用jQuery(儘管普通的javascript也可以),以便在隨後獲取用於編輯的src和title屬性之前檢查此字符串是否包含img標記。

現在我已經儘可能的把html變成一個對象。但在此之後,我無法設法搜索它的img元素。閱讀本(How to manipulate HTML within a jQuery variable?)之後,我嘗試:

$elem.find('img'); 

,但它只是出來作爲一個「不確定」的對象......

我想我失去了一些東西很明顯這裏(它晚了) ,但一個小時後,我仍然無法弄清楚如何從選擇中獲取img標籤。 。:(

提前感謝

+1

你爲了得到'undefined'結果你做了什麼?你可以發佈一個用於創建jQuery對象的HTML示例嗎? – user113716 2010-09-01 23:36:23

+0

我只是在做console.log(Chrome的調試器)。無論我做什麼,我最終都會得到一個對象(__proto__?),它的上下文參數設置爲「undefined」,選擇器爲「img」。 HTML被選中是直截了當的 - 只是一個img ta,一些粗體文本和一個img標籤等 如果我記錄$ elem(如在第一位代碼中),我得到一個包含選定的一段代碼。所以這一點工作正常。但後來我無法設法讓jQuery從中選擇img元素(通過console.log($ elem.find('img'));)。它總是給這個「未定義」的對象。 – Fourjays 2010-09-01 23:49:23

+0

'.find()'方法不會爲你得到''。請參閱下面的答案。 – user113716 2010-09-01 23:55:29

回答

25

由於<img>位於jQuery對象的根目錄,因此您需要使用.filter()而不是.find()

$elem.filter('img'); 

.filter()方法着眼於在jQuery對象的頂層的元件(一個或多個),而.find()查找在任何頂級元素的嵌套元件。

如果您不確定目標元素的位置,可以將HTML放入包裝器<div>中進行搜索。這樣,HTML給出的將永遠不會在頂部。

var selected_html = ed.selection.getContent(); 
var $elem = $('<div>').html(selected_html); 

var $img = $elem.find('img'); 
+0

完美,謝謝!知道這將是最簡單的事情。 :P – Fourjays 2010-09-02 10:51:01

0

試試,看看什麼是真正的$elem變量中只要做到同時使用火狐一個Firebugconsole.log($elem)你應該能夠管理相當好的;!)