indexOf IF语句使用&&amp ;;在一个字符串中查找两个值

时间:2013-09-25 11:08:25

标签: javascript jquery indexof

我在使用if语句时遇到问题,该语句使用indexOf JS函数在一个字符串中查找两个不同的值。如果它没有找到这两个值,则if语句继续执行并执行其功能。

我的$.each功能的目的是跟踪我网站上显示的所有外部链接,并排除其中包含“sony”和“/ pro”字样的所有内部链接。例外情况需要是这两个链接(http://www.response.pro.sony.eu/http://www.assets.pro.sony.eu/)。

所以我要做的是避免执行我的函数(分配onClick =“”),如果if语句indexOfs找到我给它的两个值。这是'/ pro'和'sony'

小提琴:http://jsfiddle.net/qj482/1/

我在其中提供了一个带有示例代码的JSFiddle。我在那里有一些链接来测试并确保过程有效,但目前还没有。

在小提琴中我需要以下链接转为绿色(跟踪),我会列出那些需要避免的链接。

http://www.pinewood.com/                - Tracked (green)
http://www.sony.co.uk/pro/hub/home      - Avodied (red)
http://www.sony.co.uk/pro/hub/tree      - Avodied (red)
http://www.sony.co.uk/pro/page/foo      - Avodied (red)
http://www.sony.co.uk/pro/page/bar      - Avodied (red)
http://www.response.pro.sony.eu/        - Tracked (green)
http://www.assets.pro.sony.eu/          - Tracked (green)
http://www.supermarsh.co.uk/pro-series  - Tracked (green)

http://www.sony.co.uk/                  - Avoided (red, has special .avoid class)
http://www.specialsite.com/             - Avoided (red, has special .avoid class)

请注意,特殊的'.avoid'类只是在那里,因为客户希望能够避免任何链接,如果他们想要覆盖检测。

我该如何使这项工作?这是我的标记和JS

HTML /标记

<p>Adipiscing elit. Ut diam eget lectus sit amet elementum orci tincidunt. Aenean nibh mi, rhoncus eget placerat sit amet, iaculis sed sapien. Aenean porta felis vel nibh pretium ac pretium tortor auctor. Nam et ipsum est. Vestibulum tristique vulputate condimentum. Pellentesque vel justo tellus. Phasellus velit sapien, <a href="http://www.pinewood.com">http://www.pinewood.com</a> Integer eros enim, vulputate vitae dignissim eget, <a href="http://www.sony.co.uk/" class="avoid">www.sony.co.uk/</a> quis augue. Curabitur <a href="http://www.sony.co.uk/pro/hub/home">www.sony.co.uk/pro/hub/home</a> lorem <a href="http://www.sony.co.uk/pro/hub/tree">www.sony.co.uk/pro/hub/tree</a> orem <a href="http://www.sony.co.uk/pro/page/foo">www.sony.co.uk/pro/page/foo</a> lorem <a href="http://www.sony.co.uk/pro/page/bar">www.sony.co.uk/pro/page/bar</a> molestie, <a href="http://www.response.pro.sony.eu">www.response.pro.sony.eu</a> sem <a href="http://www.assets.pro.sony.eu">www.assets.pro.sony.eu</a> vitae <a class="avoid" href="http://www.specialsite.com">www.specialsite.com.</a> lobortis, sapien nisl euismod purus, non commodo lacus est vel turpis. Cras <a href="http://www.supermarsh.co.uk/pro-series">www.supermarsh.co.uk/pro-series</a> iaculis sagittis nisl, sed ultricies erat condimentum quis.</p>

的JavaScript / Jquery的

//:not("avoid") skips any <a> tags with the class '.avoid'
$('a[href*="http://"]:not(".avoid")').each(function(index, element) {
var hrefContent = $(this).attr('href');
domainName = hrefContent.replace('http://','');

console.log(domainName);

//Skip adding GA tracking if href contains the word sony 
if(domainName.indexOf("/pro") == -1 && domainName.indexOf("sony") ==  -1)
    {
        $(this).attr('onclick','_gaq.push(["_trackEvent","Press Centre","email","'+domainName+'"]) ;_gaq.push(["b._trackEvent","Press Centre","email","'+domainName+'"]);').addClass('tracked');
    } else {
        $(this).addClass('avoided')
    }

});

更新

感谢所有回复,但使用了||运算符似乎只是部分工作,因为当我添加一个内部的简单链接(www.sony.co.uk)时应该避免并变为红色,因为它包含单词'sony'。相反,它变为绿色并被跟踪。任何人都可以纠正这个问题吗?

请看这个小提琴:http://jsfiddle.net/qj482/11/

4 个答案:

答案 0 :(得分:1)

在这里,它不是很漂亮,但完成工作。

   //:not("avoid") skips any <a> tags with the class '.avoid'
   $('a[href*="http://"]:not(".avoid")').each(function (index, element) {
       var hrefContent = $(this).attr('href');
       domainName = hrefContent.replace('http://', '');

       console.log(domainName);

       //Skip adding GA tracking if href contains the word sony 
       if ((domainName.indexOf("\/pro\/") == -1 && domainName.indexOf("sony") == -1) || ((domainName.indexOf("sony") == -1 && domainName.indexOf("\/pro") > -1) || domainName.indexOf("www.response.pro.sony.eu") > -1 || domainName.indexOf("www.assets.pro.sony.eu") > -1)) {
           $(this).attr('onclick', '_gaq.push(["_trackEvent","Press Centre","email","' + domainName + '"]) ;_gaq.push(["b._trackEvent","Press Centre","email","' + domainName + '"]);').addClass('tracked');
       } else {
           $(this).addClass('avoided')
       }

   });

答案 1 :(得分:0)

对于您的具体示例,您可以写

if(domainName.indexOf("sony.co.uk/pro") == -1)
    {

但实际上你只需要替换&amp;&amp;运算符||一切都按你的意愿运作。

if(domainName.indexOf("/pro") == -1 || domainName.indexOf("sony") ==  -1)
    {

这是因为您希望跳过包含sony/pro的地址,这意味着您要跟踪的地址不包含sony/pro。< / p>

答案 2 :(得分:0)

查看此fiddle

我更改了您的javascript代码,以避免lnks立即变为红色。 未避免的链接将获得.click()事件处理程序,以便在您单击链接时触发_gaq代码并且链接将接收额外的类.tracked

还将运算符更改为||。

PS:注释掉_gaq lines,因为点击处理程序会输出错误。

希望这有帮助!

答案 3 :(得分:0)

您的操作员错了,您需要使用|| (或)

if(domainName.indexOf(“/ pro”)== -1 || domainName.indexOf(“sony”)== -1)

此外,使用indexOf()存在兼容性问题,IE范围在许多旧浏览器中都不支持。

当你使用jQuery时,尝试使用$ .inArray() - http://api.jquery.com/jQuery.inArray/