Javascript jQuery$.get不返回';每个';顺序正确吗?
我有一个有8个“条目”的页面。每个Javascript jQuery$.get不返回';每个';顺序正确吗?,javascript,html,jquery,Javascript,Html,Jquery,我有一个有8个“条目”的页面。每个.entry都有一个链接fetchLink和一个标题entry title 在fetchLink链接到的页面上,有另一个链接fetchedInfo,我想$。获取,并用作href来包装条目标题 我的代码尝试: var fetchLink; $(".entry").each(function() { fetchLink = $(this).find('a').attr('href');
.entry
都有一个链接fetchLink
和一个标题entry title
在fetchLink
链接到的页面上,有另一个链接fetchedInfo
,我想$。获取
,并用作href来包装条目标题
我的代码尝试:
var fetchLink;
$(".entry").each(function() {
fetchLink = $(this).find('a').attr('href');
$.get(fetchLink, function(res) {
var fetchedInfo = ($(res).find(".g1-cta-button-wrap a").attr("href"));
console.log(fetchedInfo);
$(".entry-title").wrap('<a href="' + fetchedInfo + '"></a>');
});
});
请注意,在我的实际代码中,我会:
fetchLink = $(this).find(".entry-comments-link").find('a').attr('href');
由于comments链接是我需要用于$.get的链接,因此结果是“无序的”,因为get是异步的。如果结果的显示顺序很重要,则在解决前一个get之前,不应尝试进行另一个get。对你来说,我认为这不重要。你应该期望看到结果在他们到达时出现
只有第一个条目标题被包装的原因是因为你要它这么做。您需要创建对正在处理的当前对象的引用。因此jQuery中的第一行应该是
const $this = $(this)
而不是
$(".entry-title").wrap('<a href="' + fetchedInfo + '"></a>')
$(“.entry title”).wrap(“”)
你应该这样做
$(this).find(".entry-title").wrap('<a href="' + fetchedInfo + '"></a>')
$(this.find(“.entry title”).wrap(“”)
这将使jQuery只包装当前正在处理的条目的条目标题
第一点的补充:每个get()
都会触发对某个端点的新请求,并消耗服务器的一部分带宽。你在问题中说你有8个条目。这是我将考虑发送到我自己的服务器的请求数量的上端。最好配置您的站点,以便您可以一次检索所有信息,或者如果您最终有超过8个条目或性能问题,则创建一个一次只请求一件事情的排队过程。由于get是异步的,因此结果是“无序的”。如果结果的显示顺序很重要,则在解决前一个get之前,不应尝试进行另一个get。对你来说,我认为这不重要。你应该期望看到结果在他们到达时出现
只有第一个条目标题被包装的原因是因为你要它这么做。您需要创建对正在处理的当前对象的引用。因此jQuery中的第一行应该是
const $this = $(this)
而不是
$(".entry-title").wrap('<a href="' + fetchedInfo + '"></a>')
$(“.entry title”).wrap(“”)
你应该这样做
$(this).find(".entry-title").wrap('<a href="' + fetchedInfo + '"></a>')
$(this.find(“.entry title”).wrap(“”)
这将使jQuery只包装当前正在处理的条目的条目标题
第一点的补充:每个
get()
都会触发对某个端点的新请求,并消耗服务器的一部分带宽。你在问题中说你有8个条目。这是我将考虑发送到我自己的服务器的请求数量的上端。最好配置您的站点,以便您可以一次检索所有信息,或者,如果您最终有8个以上的条目或性能问题,创建一个一次只请求一件事情的排队过程。您没有限定要包装哪个。条目标题
,因此每次GET请求完成时,都要包装所有条目
围绕匹配元素集中的每个元素包装一个HTML结构
不清楚,因为您没有提供任何HTML,但是如果每个.entry title
都存在于您正在迭代的.entry
中,请尝试以下操作
$(“.entry”)。每个(函数(){
常量条目=$(此)
const fetchLink=entry.find('a').attr('href'))
const entryTitle=entry.find('.entry title')//在此.entry中查找.entry title
$.get(fetchLink,res=>{
const href=$(res).find(“.g1 cta按钮包装a”).attr(“href”)
console.log(href)
entryTitle.wrap($('',{href}))
},'html')
})
控制台将在请求完成时记录每个HREF。这可能以任何顺序发生,但至少现在,您将只在每个
条目中更改文档您没有限定要包装哪个.entry title
条目,因此每次GET请求完成时,它都会包装所有条目
围绕匹配元素集中的每个元素包装一个HTML结构
不清楚,因为您没有提供任何HTML,但是如果每个.entry title
都存在于您正在迭代的.entry
中,请尝试以下操作
$(“.entry”)。每个(函数(){
常量条目=$(此)
const fetchLink=entry.find('a').attr('href'))
const entryTitle=entry.find('.entry title')//在此.entry中查找.entry title
$.get(fetchLink,res=>{
const href=$(res).find(“.g1 cta按钮包装a”).attr(“href”)
console.log(href)
entryTitle.wrap($('',{href}))
},'html')
})
控制台将在请求完成时记录每个HREF。这可能以任何顺序发生,但至少现在,您将只更改每个.entry
中的文档。这就是异步调用的工作方式。提供HTML结构将大大有助于解决此问题。我现在添加了实际的HTML。唯一需要注意的是,为了简化我的问题,我编写了fetchLink=$(this.find('a').attr('href')代码>而不是我代码中的实际内容,即fetchLink=$(this.find(.entry comments link”).find('a').attr('href')代码>这就是异步调用的工作原理提供HTML结构将大大有助于解决此问题我现在添加了实际的HTML。唯一需要注意的是,为了简化我的问题,我编写了fetchLink=$(this.find('a').attr('href')代码>而不是我代码中的实际内容,即fetchLink=$(this.find(.entry comments link”).find('a').attr('href')
小心,在$回调中,此
将不再引用.en