检查DOM中的重复链接

时间:2018-10-12 06:15:08

标签: javascript wordpress duplicates

我正尝试检测我的网站是否包含带有相同href链接的文章,以防止重复的文章显示在彼此的正下方。 该网站是在Wordpress中构建的,我进行了以下查询来显示文章:

$popular = new WP_Query(
    array(
        'posts_per_page'=>4,
        'cat'=>[-48],  // don't display category with this ID in the array
        'meta_key'=>'popular_posts',
        'orderby'=>'meta_value_num',
        'order'=>'DESC',
        'date_query' => array(
            array(
                'after' => array(
                    'year'  => date('Y', $date ),
                    'month' => date('m', $date ),
                    'day'   => date('d', $date ),
                ),
            )
        )
    )
);

将其放入while循环中。 另一个类似的文件就在其下面,在另一个.php文件中,并且它们都使用get_template_part函数通过父文件加载。

现在,我已经编写了以下代码来记录所需的链接:

jQuery(document).ready(function($){
    var links = document.querySelectorAll('.top-post .post-title a');
    for(var i = 0; i < links.length; i++){
        console.log(links[i].href);
    };

    var links2 = document.querySelectorAll('.tiles .post-title a');
    for(var i = 0; i < links2.length; i++){
        console.log(links2[i].href);
    };
});

这当然对我编写if语句没有帮助,因为它们都在各自的for循环中,而我无法到达它们。 我还尝试在for循环外创建一个var,并尝试使用+ =存储它,但这只是将所有链接放在一行中,这使我无法单独检查每个链接。

是否甚至可以检测到我的页面是否具有与我设置代码的方式相同的href链接,或者是否必须尝试其他操作?

如果有什么建议对我有帮助,我将不胜感激。

提前谢谢!

编辑: 我的意图是删除这两篇文章之一,以便删除链接所在的父div。

1 个答案:

答案 0 :(得分:2)

您可以在Set .top-posta中创建一个href。然后,当您遍历.tiles时,请检查Set是否包含您要遍历的项目的href

const topHrefs = new Set(Array.prototype.map.call(
  document.querySelectorAll('.top-post .post-title a'),
  a => a.href
));
document.querySelectorAll('.tiles .post-title a').forEach((a) => {
  if (topHrefs.has(a.href)) {
    console.log('duplicate found: ' + a.href);
    // To remove the parent element of a found duplicate:
    a.parentElement.remove();
  }
});