【问题标题】:Get id of selected anchor tag on click and set html of another div accordingly单击时获取选定锚标记的 id 并相应地设置另一个 div 的 html
【发布时间】:2012-06-29 19:03:03
【问题描述】:

我有 3 个锚 (a) 标签,它们都共享一个 div 元素来操作。请参阅下面的我的 html。基本上,当您单击锚标记 1 时,我希望它用 html 填充 id="fillDiv" 的 div。当您单击第二个锚标记时,它应该清除该#fillDiv 并将其替换为新的 html。我该如何设置这样的功能。这是我的尝试

HTML:

<div>
<a id="a1" href="javascript: changeDiv();">tag1</a>
<a id="a2" href="javascript: changeDiv();">tag2</a>
<a id="a3" href="javascript: changeDiv();">tag3</a>
</div>

<div id="fillDiv"></div>

JS:

function changeDiv(){
     if changeDiv().is('#a1'){
         document.getElementById('fillDiv').html('<div>filling 1</div>');
         }

     elseif
         changeDiv().is('#a2'){
         document.getElementById('fillDiv').html('<div>filling 2</div>');
         }

     elseif
         changeDiv().is('#a3'){
         document.getElementById('fillDiv').html('<div>filling 3</div>');
         }
}

请注意:我不想使用显示/隐藏 div 功能,对我来说重要的是填充 Div 只是一个 div,而不是与其他 2 个在开始时具有 display:none 属性的 div 相结合。

任何帮助表示赞赏

谢谢

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    您的 html 保持不变,只需删除 onclick 事件并在 js 下面尝试 -

    $("a").click(function(){
       if($(this).attr("id") == "a1") {
          $("#fillDiv").html("<div>filling 1</div>")
       }
       else if($(this).attr("id") == "a2") {
          $("#fillDiv").html("<div>filling 2</div>")
       }
       else if($(this).attr("id") == "a3") {
          $("#fillDiv").html("<div>filling 3</div>")
       }
    });
    

    这是小提琴 - http://jsfiddle.net/ashwyn/cPZfX/

    如果你的 id 会像 a1, a2, a3 那么你做一个循环并做更多的优化。

    【讨论】:

    • 好东西。太感谢了。我有一个愚蠢的问题要问你。 $ 声明只是 Jquery 库的一部分还是纯 javascript?另外,我假设这个例子中的 javascript 应该包含在标记中的 html 之后,对吧?什么时候必须在头脑中,什么时候不应该(一般来说)?
    • 是的 $ 声明是 jquery 的一部分。您必须在 &lt;head&gt; 中包含 jquery 文件。最好在创建您的 html 之后调用我编写的脚本,即在 &lt;/body&gt; 之前会更好。因为仅当元素存在于 DOM 中时才会绑定事件。好吧,在阅读了@Interfector 的回答之后,我认为如果您没有在代码中使用 jquery,那么就不要使用我的解决方案。试试他的。
    【解决方案2】:

    下面的代码遵循您的示例,但您可以根据 id 使其更通用。

    var element;
    var handler = function( event ) {
        var target = document.getElementById('fillDiv');
        switch this.id {
           case 'a1':
             target.html('<div>filling 1</div>');
             break;
           case 'a2':
             target.html('<div>filling 2</div>');
             break;
           case 'a3':
             target.html('<div>filling 3</div>');
             break;
        }
    };
    for ( var i = 1; i <= 3; i++ ) {
      element = document.getElementById( 'a' + i );
      element.addEventListener( 'click', handler );
    }
    

    【讨论】:

    • 非常感谢您的回答。我真的很喜欢纯 Javascript 的事实,但我不确定如何从 a 标签调用该函数。我假设它一定是 Onclick="" 事件,但是我该如何配置呢?
    • 点击事件配置在解决方案的下部,for循环。在这里,我将点击事件附加到由 ai 模式标识的 a 标签,其中 i 是 1 到 3 之间的值(就像你的问题一样)。现在,handler 变量实际上是在事件被触发时被调用的函数。这是您应该添加逻辑的地方。我只是在那里添加了一个 switch 语句作为示例。
    猜你喜欢
    • 2019-03-16
    • 2017-03-21
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2016-02-18
    • 2012-04-10
    • 1970-01-01
    • 2015-10-12
    相关资源
    最近更新 更多