【问题标题】:Manipulating a Button's link in JS在 JS 中操作按钮的链接
【发布时间】:2019-12-19 00:57:02
【问题描述】:

我正在尝试操作按钮的超链接,但我对此无能为力,也不知道哪里出错了。

代码:

<link rel="stylesheet" href="https://cdn.site.td/Calendar.css">
<script type="text/javascript" src="https://cdn.site.td/Calendar.js"></script>
<div id="the-calendar"></div>
<script>
   document.addEventListener("DOMContentLoaded", function() {
   var options = {
   fullNames : false
   };
   var myCalendar = new Calendar(document.getElementById('the-calendar'), options);
   });
</script>

这会生成一个加载到单独网站上的事件日历。将它加载到一个单独的域时,它可以完美地工作,除了一件事。有一个事件的更多信息按钮,当您单击它时,它会尝试转到:

/folder/folder/folder/event-name-1

当然,当我在单独的域中生成它时,它会尝试使用相同的文件夹路径,但当前域除外。因此它无处可去,因为两个域上的文件夹都不相同。

我想给按钮添加一个onClick事件来操作超链接的路径。

按钮是:

<button class="calendar-icon-info-action">More info</button>

请记住,在上面的初始脚本加载并使用日历的 HTML 填充页面之前,不会生成此按钮。

因此,一旦加载了日历,我就需要为每个要操作的事件添加更多信息链接以添加原始域路径。我需要一个变量来存储原始路径,因为它也不会改变。

因此,回顾一下潜在客户生成的更多信息:

/folder/folder/folder/event-name-1

我希望将其存储在一个变量中,然后将另一个用于域的 var 存储在一起,这样它就变成了这样:

var a = "domain.tld";
var b = "/folder/folder/folder/event-name-1";
var c = a + b;

document.getElementsByClassName("calendar-icon-info-action")[0].addEventListener("click", function(){
document.getElementsByClassName("calendar-icon-info-action")[0].href = var c;
});

【问题讨论】:

  • 是的,按钮是动态生成的,是的,我有到 calendar.js 文件的链接,但是不能通过为网站提供服务的第三方供应商对其进行修改,他们也不会修改他们的 js 文件来解决这个问题,因为它是如何编写的。

标签: javascript button hyperlink addeventlistener getelementsbyclassname


【解决方案1】:

href 属性仅适用于标签(链接)。既然你有一个&lt;button&gt;,你可以做的是拦截并阻止原始事件,并将页面重定向到所需的 URL。

类似这样的:

document.getElementsByClassName("calendar-icon-info-action")[0].addEventListener("click", function(event){
    // This will stop the original event:
    event.preventDefault();

    // This will open your desired URL:
    window.location.href = c
});

如果您有多个按钮并且想要更新所有按钮的事件,您可以循环按钮:

document.querySelectorAll(".calendar-icon-info-action").forEach((elem) => elem.addEventListener("click", function(event){
    event.preventDefault();
    window.location.href = c;
}))

为了将来参考,如果您有链接而不是按钮,并且想要更改 href 属性,那么正确的做法是:

document.getElementsByClassName("calendar-icon-info-action")[0].setAttribute('href', 'your-url-here')

【讨论】:

  • 感谢您的反馈。我不够具体,并且在最初的解释中使用 var a,b,c 是错误的。 'your-url' 是在最初点击时动态创建的。因此,在单击之前,脚本无法知道变量或“您的 URL”是什么。我想我真正需要的是在单击时动态创建的“your-url”之前以某种方式注入的“href”?是的,页面上有多个链接,因此每个“您的网址”都会有所不同。
  • 我有点困惑...首先,您是在处理&lt;buttons&gt; 还是&lt;a&gt; 标签? href 仅适用于&lt;a&gt;
  • 你提到链接是动态的。那么你想在链接前添加一些东西吗? (因为你不知道链接应该是什么)
  • calendar.js 文件在 html 中创建一个日历,上面的 js 监听器从其他网站拉取事件。这些事件有一个标有更多信息的 div 类按钮。所有这些都是在页面上动态填充的,所以是的,没有办法预先确定链接。所以是的,对于您的最后一条评论,我需要一种在动态生成的超链接之前添加或插入 domain.tld 的方法。
  • 我不知道那是否可能。问题是,按钮只是一个可点击的元素,它不包含任何超链接信息。因此,除非这些生成的链接在代码中可见,否则您将永远无法使用 Javascript 检索它们。你有更多可以分享的代码吗?也许是 calendar.js 或最终生成的动态代码?这可能会给我们一个线索,但恐怕这是一项不可能完成的任务......
猜你喜欢
  • 1970-01-01
  • 2018-11-16
  • 2020-08-05
  • 1970-01-01
  • 2011-11-25
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多