在多个div上显示/隐藏而不定义div元素ID

时间:2018-11-08 09:43:43

标签: html html5

首先很抱歉英语/语法不好

am在显示和隐藏的地方创建一些东西。

但是我的问题是,当我单击“显示/隐藏”时,它只在两个按钮上都带来了输入框1。我希望它显示/隐藏每个框。

我的问题是。我不想使用id来定义show / hide元素 因为如果我的输入框超过10格,则必须通过getElementById定义它们,我不想要那样。

当我单击“显示/隐藏”时,我希望它带来没有getElementById的输入框 这样,即使我要显示的输入框超过10个,我也只能单击并显示/隐藏而不定义其ID

function myFunction(event) {
            var x = document.getElementById("mydv");
            if (x.style.display === "none") {
                x.style.display = "block";
            } else {
                x.style.display = "none";
            }
            
            x.parentNode.insertBefore(x, event.target.nextSibling);
        }
        document.addEventListener('click', function(event){
        	if(event.target.className.includes("dv1")){
          	myFunction(event);
          }
        });
<!DOCTYPE html>
    <html>
    <head>
    <title> SHOW / Hide </title>
    </head>
    <body>
    <ul>
    <li>
    <div id="mydv" style="display:none;">	
    <p>input box 1
      <input type="text" name="textfield">
    </p>
    </div>
      <button class="dv1">SHOW/HIDE</button>
     </li>
     
     <li><div id="mydv" style="display:none;">	
      <p>input box 2
      <input type="text" name="textfield">
    </p> 
    </div>
      <button class="dv1">SHOW/HIDE</button></li>
    </ul>
    
    </body>
    
    </html>

3 个答案:

答案 0 :(得分:1)

如果要在页面上指定一个元素,该元素在任何方面都可能与其他元素(除了文本内容或其他内容)相似,实际上,您需要一个id,因为这是JavaScript定义唯一元素的方式。

但是,您可以做的是更改HTML按钮,使其包含一个作为属性的rel,然后获取该属性,并使用该属性指定要查找的元素ID。

然后您可以调用一个函数,并简单地将“ this”作为参数传递。

HTML:

<button onclick="hideShow(this)" rel="mydv">Show/Hide</button>

JavaScript:

<script>

function hideShow(elem){

  var ele = document.getElementById(elem.getAttribute("rel"));

  if(ele.style.display == "none"){
    ele.style.display = "block";
  }
  else{
  ele.style.display = "none";
  }

}

</script>

如果您绝对不喜欢使用ID,则可以使用子节点并通过数字指定哪个子节点,但这意味着如果您进行任何更改,都将破坏代码,这是愚蠢的。我建议使用唯一的ID,并以上述方式简单地更改代码。

答案 1 :(得分:0)

问题是getElementById引用具有该ID的第一个元素。它只是忽略了其他所有内容。对多个元素使用相同的ID是一种不好的做法。 id应该是对该元素的唯一引用,请改用class。

答案 2 :(得分:0)

对问题的简短且懒惰的回答-如果要保留当前的层次结构,则只需在LI parentNode内找到DIV标签(因为它是唯一的DIV标签)。

基本上就是这样-按下按钮->将焦点从按钮更改为父节点LI->找到DIV。

简而言之-在function myFunction(event)更改中

var x = document.getElementById("mydv");

var x = event.target.parentNode.getElementsByTagName("DIV")[0];

工作示例: https://jsfiddle.net/w2a9zg46/1/