在.append()之后.unwrap()不起作用.load()

时间:2018-02-14 09:46:02

标签: javascript jquery html

我目前正在这样做:

$("div#js-product-list .products.row").append($("<div>").load('http://andreisdev.tk/alexstan/en/2-home?page=' + page_nr + ' .products.row article.product-miniature.js-product-miniature'));

然后我正在递增page_nr,这在这个问题中并不重要,因为它有效。

之后我试图解开刚加载到页面中的article以使其与页面中已有的其他article的兄弟姐妹一起,因为加载会覆盖您所做的选择,我有在我当前所有文章的最后都要div

我试图以这种方式打开它们:

$('article.product-miniature.js-product-miniature ~ div article.product-miniature.js-product-miniature').unwrap();

所以基本上我选择刚刚附加为当前article s的兄弟,然后我选择刚刚加载到新div中的article并尝试打开它们。 / p>

如果我在控制台中执行此操作,首先使用.append().load()键入命令并运行它,然后.unwrap()它完全正常工作,如果我在同一时间插入和运行它们虽然它不起作用,但是从我的.js文件中发生同样的事情。

我有点成功:

setTimeout(function() {
  $('article.product-miniature.js-product-miniature ~ div article.product-miniature.js-product-miniature').unwrap(); 
}, 500);

但必须有一种直接的方法。

EDIT !!!

由于评论不会被太多人看到,所以回复:

$("div#js-product-list .products.row").append($("<div>").load(''+link+' .products.row article.product-miniature.js-product-miniature', function() { $('article.product-miniature.js-product-miniature ~ div article.product-miniature.js-product-miniature').unwrap(); }));

1 个答案:

答案 0 :(得分:1)

问题是因为load()是异步的,所以你试图解开尚不存在的元素。这就是使用超时来延迟逻辑工作的原因。

更好的解决方案是使用$("div#js-product-list .products.row").append($("<div>").load('http://andreisdev.tk/alexstan/en/2-home?page=' + page_nr + ' .products.row article.product-miniature.js-product-miniature', function() { $('article.product-miniature.js-product-miniature ~ div article.product-miniature.js-product-miniature').unwrap(); })); 的回调参数来提供在内容添加到DOM之后执行展开逻辑的函数。像这样:

echo $result1;