Javascript 操作按钮';JS中的s链接

Javascript 操作按钮';JS中的s链接,javascript,button,hyperlink,addeventlistener,getelementsbyclassname,Javascript,Button,Hyperlink,Addeventlistener,Getelementsbyclassname,我试图操纵一个按钮的超链接,但我没有任何进展,也不知道我哪里出了问题 守则: <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> <scri

我试图操纵一个按钮的超链接,但我没有任何进展,也不知道我哪里出了问题

守则:

<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>
当然,当我在一个单独的域上生成它时,它会尝试相同的文件夹路径,除了当前域。因此,由于两个域上的文件夹不相同,因此它将毫无用处

我想向按钮添加一个onClick事件来操纵超链接的路径

按钮是:

<button class="calendar-icon-info-action">More info</button>
我想将其存储在一个变量中,然后将域的另一个变量存储在一起,这样它就会变成这样:

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;
});
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
});

href
属性仅适用于标签(链接)。因为您有一个
,所以您可以截取并阻止原始事件,并将页面重定向到所需的URL

大概是这样的:

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;
});
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')

是的,按钮是动态生成的,是的,我有指向calendar.js文件的链接,但无法通过为网站提供服务的第三方供应商修改它,他们不会修改js文件来修复此问题,因为它是如何编写的。感谢您的反馈。我不够具体,我在最初的解释中做了var a,b,c是错误的。“您的url”是在最初单击时动态创建的。因此,在单击之前,脚本无法知道变量或“您的url”是什么。我想我真正需要的是在点击后动态创建“你的url”之前以某种方式注入“href”?是的,页面上有多个链接,所以每个“你的url”都会不同。我有点困惑…首先,你是在处理
还是
标签
href
仅适用于
,您提到的链接是动态的。那么,您想在链接前添加一些内容吗?(因为你不知道链接应该是什么)calendar.js文件用html创建了一个日历,上面的js监听器从其他网站提取事件。事件有一个div class按钮,标记为more info。所有这些都在页面上动态填充,因此没有办法预先确定链接。所以,是的,对于你的最后一条评论,我需要一种在动态生成的超链接之前预先添加或插入domain.tld的方法。我不知道这是否可行。问题是,按钮只是一个可单击的元素,它不包含任何超链接信息。因此,除非这些生成的链接在代码中可见,否则您将永远无法使用Javascript检索它们。您是否有更多可以共享的代码?可能是calendar.js或最终生成的动态代码?这可能会给我们一个线索,但恐怕这是一项不可能的任务。。。