【问题标题】:Jquery to find a name on html page and add hyperlinkJquery在html页面上查找名称并添​​加超链接
【发布时间】:2011-02-10 15:18:35
【问题描述】:

这是我的例子: 我有一个包含以下内容的网站:

<body>
Jim Nebraska zipcode 65437
Tony lives in California his zipcode is 98708
</body>

我希望能够在页面上搜索邮政编码并用超链接将它们包装起来,例如:

<body>
Jim Nebraska zipcode <a href="/65437.htm">65437</a>
Tony lives in California his zipcode is <a href="/65437.htm">98708</a>
</body>

我可以使用正则表达式选择器来查找字符串然后包装字符串,还是用新的超链接替换它?

我是 Jquery 的新手,正在寻找可以为我指明正确方向的人。

谢谢,

迈克

【问题讨论】:

    标签: javascript jquery html-parsing


    【解决方案1】:

    您可以在 html 上使用 replace 方法:

    $('body').html().replace(/\s(65437)\s/g, '<a href=...' + $1 + '</a>');
    

    更新:显然此示例仅搜索一个特定的邮政编码,但您可以通过使用邮政编码数组并对每个编码执行替换来调整语句。

    【讨论】:

    • 或使用 .replace(/\s(\d{5}|\d{5}-\d{4})\s/g, 假设每个 5 和 9 位邮政编码都有一个关联的页面。
    【解决方案2】:

    这和mamoo和Jim发的基本一样

    对表达式稍作修改并使用函数而不是 $1 出于某种原因,萤火虫尝试使用 $1 时出现错误

    var s = "Jim Nebraska zipcode 65437\nTony lives in California his zipcode is 98708";
    // var s = "12345 should be but not this 22 or this 9999999 here is a zip 44444, and then some more content and another one 34366 and so on";
    var result = s.replace(/(\b\d{5}-\d{4}\b)|(\b\d{5}\b)/g, function (thisMatch) {
      return "<a href='/" + thisMatch + ".htm'>";
    });
    

    这仍然无法处理单独留下 5 位数的街道地址,即 12345 Main St. 最终将链接到 12345

    更新:更改了正则表达式以避免贪婪地处理 9999999

    from: /(\d{5}-\d{4})|(\d{5})/g
    to:   /(\b\d{5}-\d{4}\b)|(\b\d{5}\b)/g
    

    似乎可以随意使用 9999999

    【讨论】:

    • 谢谢大家,我会试一试...这东西很棒
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2014-10-21
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多