无法访问jQuery中的对象(prevObject?)

3

我的WP插件中的一个功能突然间(据我所知)停止工作了。

以下是相关代码:

window.send_to_editor = function(html) {
        var classes = jQuery('img',html).attr('class');
        var items = classes.split(" ");
        ... more stuff here
}

我确认了html变量确实是一个img HTML标签。这是当我对该对象执行console.log命令时,Firebug显示的内容(console.log(jQuery('img',html));):

Object[]
context -> undefined
jquery -> "1.11.2"
length -> 0
prevObject -> Object[img.alignnone.size-full.wp-image-1234 name.jpg]

它显示的错误是classes未定义

我猜测得到的对象有问题,但这在最近仍然有效,我不知道网站中是否有任何更改可能导致此问题。

我会感激任何关于此的输入。

编辑:

更多信息。这发生在两个插件中,这些插件应该是无关的(由不同的人制作)。当您尝试将图片上传到服务器(或选择以前上传的图片)并将其插入到文章中时,就会出现这种情况。

如我之前所说,这个错误突然出现了,几天前它还能正常工作。我唯一能想到的改变是域名,但我看不出这与问题有什么关系。


如果 html 的外层元素是 img,则需要使用 filter 而不是 find 来选择它。 - Rory McCrossan
您能详细说明一下吗?我没有使用find(据我所知)。 - mustieles
你正在使用上下文选择器,它相当于 find。请尝试使用这个:var classes = jQuery(html).filter('img').attr('class'); - Rory McCrossan
谢谢,我之前不熟悉上下文选择器。我尝试了你的建议,但还是不起作用 :/。 - mustieles
如果您在问题中分享相关的HTML代码,那将会很有帮助。 - rnevius
2个回答

2

jQuery选择器总是返回一个jQuery对象,但当length0时,表示没有找到与提供的选择器匹配的元素。在您的示例中,由于jQuery对象的length0,因此已经确认未选择任何内容。可以像这样检查是否选择了元素:

var $els = jQuery('img',html),
    classes;
if ($els.length) {
    classes = $els.attr("class");
}

请记住,您的DOM查询受到html参数的限制。如果您只想在页面上查找图像,请执行以下操作:var $els = jQuery('img');


但它确实找到了一张图片!如果你查看Firebug上显示的代码,如果我在元素上执行console.log操作,则会显示一个prevObject Object [img.alignnone.size-full...]。那些是我正在尝试访问的类。 - mustieles
@mustieles 你传递的上下文是什么?第二个参数限制了搜索的上下文。 - Konstantin Dinev
你是指html参数吗?这是console.log(html)结果的精确副本(不包括域名):<img src="http://www.example.com/wp-content/uploads/2015/06/0.jpg" alt="" width="460" height="327" class="alignnone size-full wp-image-3573" /> - mustieles
@mustieles 这是一个字符串吗?上下文应该是一个元素:context 类型:元素或jQuery DOM元素、文档或jQuery可用作上下文。 - Konstantin Dinev
我猜这是一个字符串,对吧?但就在前天它还能运行,我搞不明白。有没有办法将其转换为jQuery元素? - mustieles
显示剩余3条评论

1

我终于成功解决了这个问题;关键在于将html字符串变量解析为正确的HTML,使用jQuery.parseHTML()。感谢所有帮助过我的人!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接