【问题标题】:Jquery avoid external linksjQuery避免外部链接
【发布时间】:2023-03-19 17:15:02
【问题描述】:

description of the problem

大家好,我有问题请大家帮忙, 我有一个网站,在代码中为我的链接动态赋予了 Id 和 href 属性

$('.portfolio_item').each(function(i) {
        $(this).find('a').attr('href' && 'href*="#"', '#work_' + i);
        $(this).find('.podrt_descr').attr('id', 'work_' + i);
    });

现在,当我使用 wordpres 时,我尝试将新链接添加到外部站点,但所有 当我添加到外部站点的链接时,我的链接会得到内部链接,例如#work i,所以任何人都可以告诉我如何告诉我在开始时给出的 jquery 代码避免外部链接并仅使用内部链接,我尝试使用

 $('.portfolio_item').each(function(i) {
        $(this).find('a').attr('href*="#"', '#work_' + i);
        $(this).find('.podrt_descr').attr('id', 'work_' + i);
    });

为了避免,但它不起作用,所以我将非常感谢您的任何建议,谢谢

【问题讨论】:

  • $(this).find('a[href*="#"]').attr('href', '#work_' + i);
  • 不幸的是,这个解决方案不起作用,当我像你的提议一样修复时,我的链接被破坏了,谢谢你我添加图片也许你可以更好地理解我的问题
  • 最好创建一个jsfiddle 并解释您的代码是什么以及预期的代码是什么
  • @MohamedYousef 使用a[href*="#"]attribute-contains selector)将匹配在任何位置包含字符串“#”的 URL,即带有 fragment 的 URL。任何 URL 都可以有一个片段,因此这不会将选择限制为仅内部链接。

标签: jquery hyperlink attr


【解决方案1】:

您似乎误解了示例中的 && 运算符。 a && b 表示“如果 a 是 truthy,则使用 b;如果不是,则使用 a”。字符串'href' 是真实的,因此代码中的'href' && 'href*="#"' 计算结果为字符串'href*="#"'。这是 jQuery 的 .attr 方法的无效参数,因为属性名称中不允许使用像 *" 这样的特殊字符,当我尝试运行您的代码时,它引发了 InvalidCharacterError。

相反,您可以使用attribute-starts-with selector a[href^="#"] 仅选择 URL 以字符 # 开头的链接。这不一定只匹配内部链接 - 取决于您认为“内部”的含义 - 但它可能足以满足您的上下文。

使用 attribute-starts-with 选择器将使您的代码如下所示:

$('.portfolio_item').each(function(i) {
    $('body').find('a[href^="#"]').attr('href', '#work_' + i);
    $(this).find('.podrt_descr').attr('id', 'work_' + i);
});

如果您还想使用相对 URL 匹配链接,或使用绝对 URL 匹配指向您自己网站的链接,则需要更多逻辑来处理。但这可能足以让您入门。

【讨论】:

  • 感谢您的建议,但不幸的是,此解决方案不起作用我之前尝试过,我的项目中有库与我的代码冲突我需要解决方案,该解决方案将检查 href 是否有 #work_i它会拒绝它并使用类似这样的外部链接
  • 好的,那么您使用的是什么库?您尝试了哪些步骤来解决问题?您需要向我们展示您的代码并为我们提供更多背景信息。
猜你喜欢
  • 2010-12-11
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
相关资源
最近更新 更多