2010-09-01 192 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)你应该能够管理相当好的;!)