【问题标题】:If URL contains 6 digit numeric value AND contains .pdf, .doc, .xls etc append the numeric value to a class如果 URL 包含 6 位数值并且包含 .pdf、.doc、.xls 等,则将数值附加到类
【发布时间】:2017-08-10 17:02:59
【问题描述】:

这是对我之前提出的问题的补充,但包含一些我无法破解的额外问题。我再次四处搜索并道歉,如果这已经得到回答。我还在学习,所以请放轻松。

下面的代码正确地在 URL 中查找 6 位数值,并将数值和 'pdf' 作为类添加到 href。

var regex = /[0-9]{1,6}/;
$('a').each(function() {
  $(this).addClass('pdf' + regex.exec($(this).attr("href"))[0]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<a href="https://www.pdflinks.com/files/190488/nameoffile.pdf">Link1</a>
<a href="https://www.pdflinks.com/files/112254/nameoffile.pdf">Link2</a>

问题 1
如何检查 6 位数值以及 URL 是否包含任何文档扩展类型,例如 .pdf、.doc、.xls 大写或小写等?我已经尝试了以下方法,但我的正则表达式运算符似乎有问题。我还尝试将表达式与“肯定的前瞻”断言分开,但无济于事。

var regex = /[0-9]{1,6}/\.(pdf|doc|docx|ppt|pptx|xls|slxs|epub|odp|ods|txt|rtf)$/i;
$('a').each(function() {
  $(this).addClass('pdf' + regex.exec($(this).attr("href"))[0]);
});

问题 2
如果页面包含不符合条件的 URL 链接(没有 6 位数的值或文档扩展名),则函数将在此处停止,并且不会检查其他链接。 (下面的示例)如何使代码检查并跳过非限定符并涵盖与正则表达式匹配的所有链接?

var regex = /[0-9]{1,6}/;
$('a').each(function() {
  $(this).addClass('pdf' + regex.exec($(this).attr("href"))[0]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<a href="https://www.pdflinks.com/files/190488/nameoffile.pdf">Link1</a><br>
<a href="https://www.pdflinks.com/files/112254/nameoffile.pdf">Link2</a><br>
<a href="https://www.pdflinks.com/files/nameoffile.pdf">Link3</a><br>
<a href="https://www.pdflinks.com/files/145254/nameoffile.pdf">Link4</a><br>
<a href="https://www.pdflinks.com/files/154254/nameoffile.pdf">Link5</a><br>

再次感谢您。

【问题讨论】:

    标签: javascript jquery regex append href


    【解决方案1】:

    你可以直接使用addClass,带一个回调,然后根据扩展添加类,或者根本不添加

    $('a').addClass(function() {
        if ( !this.href.match(/[0-9]{1,6}/ ) ) return "";
        var ext = this.href.match(/\.(pdf|doc|docx|ppt|pptx|xls|slxs|epub|odp|ods|txt|rtf)$/i);
        return ext[1] || "";
    });
    .pdf {color: red}
    .doc {color: green}
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <a href="https://www.pdflinks.com/files/190488/nameoffile.pdf">Link1</a><br>
    <a href="https://www.pdflinks.com/files/112254/nameoffile.pdf">Link2</a><br>
    <a href="https://www.pdflinks.com/files/nameoffile.pdf">Link3</a><br>
    <a href="https://www.pdflinks.com/files/145254/nameoffile.pdf">Link4</a><br>
    <a href="https://www.pdflinks.com/files/154254/nameoffile.pdf">Link5</a><br>
    <a href="https://www.pdflinks.com/files/145254/nameoffile.doc">Link4</a><br>

    【讨论】:

    • 我认为这行不通。似乎只将文件扩展名作为一个类而不是 6 位。
    【解决方案2】:

    请试试这个:

    var regex = /\/([0-9]{1,6})\//ig;
    $('a').each(function() {
      if ( !this.href.match(regex) ) return;
      $(this).addClass('pdf' + regex.exec($(this).attr("href"))[1]);
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <a href="https://www.pdflinks.com/files/190488/nameoffile.pdf">Link1</a><br>
    <a href="https://www.pdflinks.com/files/112254/nameoffile.pdf">Link2</a><br>
    <a href="https://www.pdflinks.com/files/nameoffile.pdf">Link3</a><br>
    <a href="https://www.pdflinks.com/files/145254/nameoffile.pdf">Link4</a><br>
    <a href="https://www.pdflinks.com/files/154254/nameoffile.pdf">Link5</a><br>

    更新日期:21/03/2017

    $(document).ready(function() {
    
        // Executes when the HTML document is loaded and ONLY the DOM is ready
        alert("Document is ready");
    });
    
    // .load() method deprecated from jQuery 1.8 onward
    $(window).on("load", function() {
    
         // Executes when complete page is fully loaded, including
         // all frames, objects and images
         // This is what you need
         alert("Window is loaded");
    });
    

    【讨论】:

    • EfiBN 是否可以在页面和内容加载后加载这个 JQuery?
    • 当然,在 $(window).on('load') 中使用它而不是在 $(document).ready 中使用它。我在你的答案中添加了更新。
    • *而不是(拼错)
    • 谢谢EfBN,我会试一试
    • BentleyO,如果对你有帮助记得采纳答案,谢谢;-)
    猜你喜欢
    • 2017-08-09
    • 1970-01-01
    • 2020-07-22
    • 2011-08-25
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多