具有匹配字符串的jQuery select属性

时间:2018-10-06 14:31:32

标签: jquery

我的网站上的许多锚标记的href属性中都有Windows“ .exe”文件链接。

如果在Mobile或Mac OS上单击了该锚标记,我想弹出一条消息:“对不起,仅Windows可用”。

任何href结尾为“ .exe”的锚标记都符合条件。如何在jQuery中选择此类锚标记?

例如:

<a href="http://www.example.com/downloads/abc.exe"></a>

应该由jQuery选择,因为它以“ .exe”结尾

但是

<a href="http://www.example.com/downloads/abc.jpg"></a>

应该由jQuery选择“不” ,因为它不以“ .exe”结尾。

我有以下代码:

if (/Mobi|Android/i.test(navigator.userAgent))
{
 jQuery("a[href*='.exe']").attr("href","#popmake-1117");
}

但是它会在href的任何位置而不是最后检测到.exe。此外,它仅适用于手机,不适用于Mac。

4 个答案:

答案 0 :(得分:1)

您可以使用indexOf()检查其中是否包含指定字符串

$(window).ready(function(){
  $("a").on("click",function(){
     var href = $(this).attr("href");
     if(href.indexOf("example.com/downloads") > -1 && href.indexOf(".exe")> - 1){
       alert("Can download");
     }else{
       alert("Sorry only available on Windows");
     }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<a href="http://www.example.com/downloads/abc.exe">Download exe</a>
<a href="http://www.example.com/downloads/abc.apk">Download apk</a>

答案 1 :(得分:1)

寻找两个值的索引。

var link=$('a').attr('href'); 
if(link.indexOf('example.com/downloads')>-1 && 
 link.indexOf('.exe')==link.length-4){
//do something
 }

答案 2 :(得分:1)

更新:尽管.filter()适用于更复杂的条件,但对于结尾为的,有效的docs[attribute$="value"]):

if (/Mobi|Android/i.test(navigator.userAgent)) {
  jQuery("a[href$='.exe']").attr("href","#popmake-1117");
}

初始答案

这就是我使用.filter()的方式:

let exes = $('a[href]').filter(function(){
  return $(this).attr('href').indexOf('.exe') > -1
});

// let's test it

exes.css({
  border: '1px solid red'
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<a href="#something.exe">has exe</a>
<a href="#something">no exe</a>

要检查.exe是否以字符串结尾,可以使用substring

let exes = $('a[href]').filter(function(){
  return $(this).attr('href').substr($(this).attr('href').length - 4) === '.exe'
});

// let's test it

exes.css({
  border: '1px solid red'
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<a href="#something.exe">has exe</a>
<a href="#something">no exe</a>
<a href="#something.exellent">exe not at the end of it</a>

答案 3 :(得分:1)

结合使用navigator.platform和indexOf

$(document).ready(function() {
  $("a").click(function(e) {
    var href = $(this).attr("href");

    if (href.indexOf(".exe") > -1) {
      console.log(navigator.platform);

      if (navigator.platform.indexOf("Win") > -1) {
        alert("You're using windows!");
        //proceed

      } else {
        alert("Only available in Windows!");
        e.preventDefault();
      }
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="www.test/test.exe">Test.exe</a>
<a href="https://www.google.com">Google</a>