如何用某个href排除锚标记?

问题描述 投票:2回答:1

我有一个采用UTM和其他url参数的JS代码,因此,当用户在页面之间导航时,我不会迷路。当href是页面时,该代码很好用,但是当它与id元素相关时,该代码就不起作用了

我试图在if语句中排除它,或者在id后面添加参数。

function getRefQueryParam(name) {
    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = regex.exec(location.search);
    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
};

var utmParamQueryString = '',
    utmParamQueryStringTrimmed = '',
    utm_source = '',
    utm_medium = '',
    utm_content = '',
    utm_campaign = '',
    utm_term = '';

(function() {
    utm_source = getRefQueryParam("utm_source");
    utm_medium = getRefQueryParam("utm_medium");
    utm_content = getRefQueryParam("utm_content");
    utm_campaign = getRefQueryParam("utm_campaign");
    utm_term = getRefQueryParam("utm_term");
    gclid = getRefQueryParam("gclid");
    fbclid = getRefQueryParam("fbclid");

    if (utm_source) {
        utmParamQueryString += '&utm_source=' + utm_source;
    }
    if (utm_medium) {
        utmParamQueryString += '&utm_medium=' + utm_medium;
    }
    if (utm_content) {
        utmParamQueryString += '&utm_content=' + utm_content;
    }
    if (utm_campaign) {
        utmParamQueryString += '&utm_campaign=' + utm_campaign;
    }
    if (utm_term) {
        utmParamQueryString += '&utm_term=' + utm_term;
    }
    if (gclid) {
        utmParamQueryString += '&gclid=' + gclid;
    }
    if (fbclid) {
        utmParamQueryString += '&fbclid=' + fbclid;
    }

    if(utmParamQueryString.length > 0) {
        utmParamQueryString = utmParamQueryString.substring(1);
        utmParamQueryStringTrimmed = utmParamQueryString;
        utmParamQueryString = utmParamQueryString;
    }
    if (!utmParamQueryString) return;
    var navLinks = document.querySelectorAll('a');

    navLinks.forEach(function(item) {
      if (item.href.indexOf('/') === 0 || item.href.indexOf(location.host) !== -1 ) {
        if (item.href.indexOf('?') === -1) {
            item.href += '?';
        } else {
          item.href += '&';
        }
        item.href += utmParamQueryString;
      }
    });
})();


因此,它将搜索每个锚标记,然后在页面uri之后,代码插入当前URL所具有的参数。问题在于它甚至会插入代码,甚至是id调用<a href="#top"></a>,而且该调用也不再起作用,因为参数不是在参数插入之后而是在参数插入之间插入,如下所示:utm_source = google&utm_medium = cpc&utm_campaign = test_cpc&utm_term = test #top &utm_source = google&utm_medium = cpc&utm_campaign = test_cpc&utm_term = test

javascript jquery dom
1个回答
4
投票

您可以像这样尝试在attribute selector上使用querySelectorAll

document.querySelectorAll('a:not([href^="#"])')

这将选择a属性不是以href开头的所有#标签。

当然,您可以根据需要尝试对其进行修改。

© www.soinside.com 2019 - 2024. All rights reserved.