【问题标题】:Delete all links and apped a text based on the ID of the clicked link删除所有链接并根据点击链接的 ID 添加文本
【发布时间】:2016-11-21 11:54:22
【问题描述】:

我需要一些有关 javascript 代码的帮助。我有三个链接,每个链接都有一个不同的 ID,我想要做的是,当我单击其中一个链接时,脚本会获取 ID,然后删除所有三个链接并在该位置放置一个文本,对于示例:

<div id="main">     
    <div>
    <div id="links">
         <a id="choice1" href="#footer" onclick="createDiv();removeLink();">choice1</a>
         <a id="choice2" href="#footer" onclick="">choice2</a>
         <a id="choice3" href="#footer" onclick="">choice3</a>
   </div>
   </div>
</div>

当我点击choice1时,必须删除所有链接并创建一个文本“you clicked in choice1”,如果我点击choice2也会发生同样的情况,但这次显示“you clicked inchoice2”。

我有这个 javascript,具有创建带有文本的 div 的功能和删除链接的功能。但我不知道如何选择 ID 并放置相应的文本。

function createDiv()
{
    var element = document.createElement("div");
    var main = document.getElementById("main");
    main.appendChild(element);
    var text = document.createTextNode("This is the new text");
    element.appendChild(text);  
}
function removeLink()
{
var link = document.getElementById("links");    
    link.parentNode.removeChild(link);
}

我在互联网上进行了很多搜索,但没有找到有效的方法。如果有人可以提供如何做到这一点的提示,我将非常感激。

【问题讨论】:

  • 我想支持 Yasin 和 litelite 在他们的回答中提到的内容 - 使用您的 javascript 附加事件侦听器。内联 onclick="..." 处理程序应该在 addEventListener(和 attachEvent)可用的那一刻就消失了。 See MDN.

标签: javascript hyperlink onclick


【解决方案1】:

您可以在父容器(即#links)上设置一个点击监听器,并检查您是否点击了其中一个链接,如果您点击了,请获取 InnerHTML 并替换您的#links div 的 innerHTML。

document.getElementById('links').addEventListener('click',function(event){
  event.preventDefault();
 var target = event.target; 
  if (target.nodeName === 'A'){
      this.innerHTML = 'You clicked on ' + target.innerHTML; 
 }

});
<div id="links">
<a id="id-1" href="google.com">Option 1</a>
<a id="id-2" href="google.com">Option 2</a>
<a id="id-3" href="google.com">Option 3</a>
</div>

【讨论】:

  • 目前所有的链接都说 option 1 并且你所有的 id 都是一样的
  • @litelie 只需更改 a 标签中 id 中的文本。我只是复制并粘贴它并忘记更改 vals。
  • 是的,我意识到了这一点。但您应该编辑您的答案,使其正确。
  • 它工作正常,但我想要的是,当我点击链接时,删除链接,创建并在该位置放置不同的文本,而不是链接内的相同文本。但这已经足够了。非常感谢您的帮助。
  • @ELS 没问题。如果您希望文本与链接的内容不同,只需将 this.innerHTML 更改为您想要的任何内容。
【解决方案2】:

您应该使用像 answer 这样的事件侦听器,因为它们通常是一种更好的做法。但是,如果您仍然想要/需要使用onclick,那么您可以使用this 并将其传递给createDiv。所以你的代码看起来像这样:

function createDiv(e)
{
    var element = document.createElement("div");
    var main = document.getElementById("main");
    main.appendChild(element);
    var text = document.createTextNode("you clicked on " + e.innerText);
    element.appendChild(text);  
}
function removeLink()
{
var link = document.getElementById("links");    
    link.parentNode.removeChild(link);
}
<div id="main">     
    <div>
    <div id="links">
         <a id="choice1" href="#footer" onclick="createDiv(this);removeLink();">choice1</a>
         <a id="choice2" href="#footer" onclick="createDiv(this);removeLink();">choice2</a>
         <a id="choice3" href="#footer" onclick="createDiv(this);removeLink();">choice3</a>
   </div>
   </div>
</div>

所有on* 事件作为参数传递事件发生的元素。

【讨论】:

  • 太棒了,效果很好。这不完全是我的意思,但是,对于我正在做的事情来说已经足够了,我非常感谢您的帮助,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多