javascript—循环中ajax之后加载jquery

6uxekuva  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(252)

我有以下代码:

document.addEventListener('DOMContentLoaded', function PostLinkHome() {
    jQuery(function($) {
        $('.post-link-home').find('.elementor-post').each(function() {
            let link = $(this).find('a').attr('href');
            $(this).wrapAll(document.createElement('a'));
            $(this).closest('a').attr('href', link);
        });
        jQuery(document).ajaxComplete(function() {
            PostLinkHome();
        });
    });
});

假设它运行jquery函数 PostLinkHome() 加载ajax之前和之后。
我尝试过这样做:

jQuery(document).bind('ready ajaxComplete', function($) {
    $('.post-link-home').find('.elementor-post').each(function() {
        let link = $(this).find('a').attr('href');
        $(this).wrapAll(document.createElement('a'));
        $(this).closest('a').attr('href', link);
    });
});

来源
但这不起作用。
问题是,代码可以工作,但一旦加载ajax,它就会再次加载jquery,加载到循环中的前面的项,这些项在ajax加载更多内容之前已经应用了函数。
这会导致ajax项应用jquery,但页面上的旧项会两次应用相同的脚本,这是一个问题。

rks48beu

rks48beu1#

只需定义要在函数中运行的代码。在documentready上调用它,并将其绑定到ajax调用(旁注:似乎很奇怪,您会在每次ajax调用中运行此代码,而不仅仅是在返回内容的调用中运行此代码)

function PostLinkHome() {
  $('.post-link-home .elementor-post').each(function() {
    const elem = $(this);

    // if parent is already a link, just exit out
    if(elem.parent().is('a')) return;

    const link = elem.find('a').attr('href');
    elem.wrapAll(document.createElement('a'));
    elem.closest('a').attr('href', link);
  });
}

// Then bind the event and call the function

jQuery(function () {
  jQuery(document).ajaxComplete(PostLinkHome);
  PostLinkHome();
});

看起来很奇怪,因为这个代码会把一个链接放到一个链接中?我猜你会想要打开初始链接。

const linkElem = elem.find('a');
const link = linkElem.attr('href');
linkElem.children().unwrap();

相关问题