如何使用javascript替换location.href链接

tcomlyy6  于 2023-05-12  发布在  Java
关注(0)|答案(4)|浏览(176)

我有很多页的按钮。我想用另一个链接替换一些特定的链接。下面是HTML代码

<button onclick="changeURL()">change link</button>
<button onclick="location.href='https://google.com'" id="link">go to link</button>

我试图添加这个脚本,但它不工作。

<script>
   function changeURL(){
        var newURL = "https://youtube.com";
        document.getElementById("link").href = newURL;
    }
</script>
3gtaxfhh

3gtaxfhh1#

如果页面上有很多按钮需要修改它们的目标,那么下面的内容可能会让你感兴趣。您不能拥有重复的ID属性,并期望任何使用该ID的JavaScript代码都能正确运行。您可以**修改该ID并使其成为dataset属性,例如data-id='link',当尝试标识多个元素时,这是完全有效的,并且是有意义的,如下所示。
用于更改按钮目标的按钮调用document.querySelectorAll来标识具有data-id属性的任何/所有按钮,然后遍历该节点列表来修改分配给每个按钮的事件处理程序。
我添加data-name属性只是为了指示不同的按钮它在修改代码中不起任何作用。

const _url_='https://www.youtube.com/watch?v=dQw4w9WgXcQ';

const go_to_youtube=(evt)=>{
  evt.preventDefault();
  console.log( 'Navigating to: %s', _url_ );
  return document.location.href=_url_;
}

document.addEventListener('click',e=>{
  if( e.target instanceof HTMLButtonElement && e.target.dataset.type=='change' ){
    document.querySelectorAll('button[data-id="link"]').forEach(n=>{
      n.addEventListener('click', go_to_youtube );
    })
  }
});
div > button{display:block}
button{margin:0.25rem;padding:0.25rem}
button[data-id='link']:after{margin:0 0 0 0.25rem;color:red;content:attr(data-name)}
<button data-type='change'>Change links</button>
<div>
  <button data-name='google' onclick="location.href='https://google.com'" data-id="link">go to link</button>
  <button data-name='yahoo' onclick="location.href='https://yahoo.com'" data-id="link">go to link</button>
  <button data-name='askjeeves' onclick="location.href='https://askjeeves.com'" data-id="link">go to link</button>
  <button data-name='microsoft' onclick="location.href='https://microsoft.com'" data-id="link">go to link</button>
  <button data-name='facebook' onclick="location.href='https://facebook.com'" data-id="link">go to link</button>
  <button data-name='tiktok' onclick="location.href='https://tiktok.com'" data-id="link">go to link</button>
  <button data-name='example' onclick="location.href='https://example.com'" data-id="link">go to link</button>
</div>
k97glaaz

k97glaaz2#

我看到的问题是,你试图改变href的值,但按钮不支持hrefs。
试试这个:

function changeURL() {
  var newURL = "https://youtube.com";
  document.getElementById("link").onclick = window.location.href = newURL;
}
<button onclick="changeURL()">change link</button>
<button onclick="location.href='https://google.com'" id="link">go to link</button>

如果你有很多按钮有不同的id,你可以在你的函数中写上名字,像这样:

function changeURL(link) {
  var newURL = "https://youtube.com";
  document.getElementById(link).onclick = window.location.href = newURL;
}
<button onclick="changeURL('link1')">change link</button>
<button onclick="location.href='https://google.com'" id="link1">go to link</button>
ecfdbz9o

ecfdbz9o3#

这是good code
getElementById(link)可能不存在。

qlzsbp2j

qlzsbp2j4#

您可以将function设置为onclick的值,并在该函数中将正确的值分配给newURL

function changeURL(){
        var newURL = "https://youtube.com";
        document.getElementById("link").onclick = function() {
            location.href = newURL;
        };
        console.log(document.getElementById("link").onclick);
    }
<button onclick="changeURL()">change link</button>
<button onclick="location.href='https://google.com'" id="link">go to link</button>

相关问题