Javascript jquery对象上下文中的jquery选择

Javascript jquery对象上下文中的jquery选择,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我有一个动态的不是DOM文档的一部分,HTML代码。类似于- 然后,我使用语法选择类为“media”的div- 现在,理想情况下,我应该在命令行上打印三个“find”,但我只得到一个。有什么想法吗?我缺少什么?您必须将函数传递给.each,并且您可以更好地按照这一行编写代码,因为它没有连接到DOM: jq.filter(function(){ return $(this).hasClass('media') }) .each(function() { console.log("found")

我有一个动态的不是DOM文档的一部分,HTML代码。类似于-

然后,我使用语法选择类为“media”的div-

现在,理想情况下,我应该在命令行上打印三个“find”,但我只得到一个。有什么想法吗?我缺少什么?

您必须将函数传递给.each,并且您可以更好地按照这一行编写代码,因为它没有连接到DOM:

jq.filter(function(){ return $(this).hasClass('media') })
  .each(function() { console.log("found"); });
您必须将函数传递给.each,并且您可以更好地按照这一行编写代码,因为它没有连接到DOM:

jq.filter(function(){ return $(this).hasClass('media') })
  .each(function() { console.log("found"); });
为清晰起见进行了编辑

在幕后使用将执行.find。读取该元素表示将搜索当前元素的子元素

这意味着您的呼叫将执行以下操作:

以abc的儿童为例—0儿童—并查找.media 0结果

带上efg的孩子-0个孩子-并查找.media 0结果

拿qwr的children-0 children-and查找.media-0结果

要以DOM方式执行,请将其包装在div中,然后执行查找:

var html = '<div class="media">abc</div>' + 
           '<div class="media">efg</div>' +
           '<div class="nvid">qwr</div>';
var obj = $(html);
//this fails:
$('div.media',obj).each(function(){console.log("found with jquery object");});

// this works as a single DOM object
var wrap = $('<div/>').append(obj).eq(0);
$('div.media',wrap).each(function(){console.log("found with DOM object");});
根据您的评论,您可以执行以下操作:

$(html).filter('.media').each(function(){
   var myDiv = $(this);
   // do stuff with myDiv.html();
});
您可以签出-现在稍微过时了。

为清晰起见进行了编辑

在幕后使用将执行.find。读取该元素表示将搜索当前元素的子元素

这意味着您的呼叫将执行以下操作:

以abc的儿童为例—0儿童—并查找.media 0结果

带上efg的孩子-0个孩子-并查找.media 0结果

拿qwr的children-0 children-and查找.media-0结果

要以DOM方式执行,请将其包装在div中,然后执行查找:

var html = '<div class="media">abc</div>' + 
           '<div class="media">efg</div>' +
           '<div class="nvid">qwr</div>';
var obj = $(html);
//this fails:
$('div.media',obj).each(function(){console.log("found with jquery object");});

// this works as a single DOM object
var wrap = $('<div/>').append(obj).eq(0);
$('div.media',wrap).each(function(){console.log("found with DOM object");});
根据您的评论,您可以执行以下操作:

$(html).filter('.media').each(function(){
   var myDiv = $(this);
   // do stuff with myDiv.html();
});

您现在可以签出-稍微过时了。

问题在于您调用console.log的方式。它就在那里求值,即使什么也没有找到,也会显示“已找到”。因为您不传递对函数的引用,所以只需调用log'found'

你应该

jQuery('div.media', jq).each(function() { console.log("found") });

问题在于调用console.log的方式。它就在那里求值,即使什么也没有找到,也会显示“已找到”。因为您不传递对函数的引用,所以只需调用log'found'

你应该

jQuery('div.media', jq).each(function() { console.log("found") });


请使用提供的代码格式选项使阅读代码更容易。-1我已经这样做了,但我怀疑这不是您想要的。请重新审视您的问题并正确设置其格式。请直接从右侧的“帮助”框开始:使用4 spacessorry缩进代码以进行格式设置,请立即发布。打印出您的jq对象,查看其中的内容。JQueryabove html不在您的代码中,可能需要添加它,以便我们可以看到您的标记。请使用提供的代码格式选项,使阅读代码更容易。-1我已经完成了,但我怀疑这不是您想要的。请重新审视您的问题并正确设置其格式。请直接从右侧的“帮助”框开始:使用4 spacessorry缩进代码以进行格式设置,请立即发布。打印出您的jq对象,查看其中的内容。JQueryabove html不在您的代码中,也许可以添加它,这样我们可以看到您的标记,但我不明白的是,为什么第一个解决方案在这种情况下失败了?我不能使用过滤器。我必须选择。请参阅已编辑的html代码。为此,我需要找到所有3个具有类媒体的div,然后使用它们的innerHTML进行一些操作。更新后的内容将进一步解释,并添加更多链接。但我不明白的是,为什么第一个解决方案在这种情况下会失败?我不能使用过滤器。我必须选择。请参阅已编辑的html代码。为此,我需要找到所有3个有类媒体的div,然后用它们的innerHTML做一些事情。更新以解释更多的事情并添加更多的链接。我不能使用过滤器。我必须选择。请参阅已编辑的html代码。为此,我需要找到所有3个具有类媒体的div,然后对它们的innerHTML进行处理。我不能使用过滤器。我必须选择。请参阅已编辑的html代码。为此,我需要找到所有3个具有类媒体的div,然后使用它们的innerHTML做一些事情。