【问题标题】:Removing a div (whose id is made with php) with a button using Onclick doesnt work使用 Onclick 删除带有按钮的 div(其 id 是用 php 制作的)不起作用
【发布时间】:2021-03-12 08:12:49
【问题描述】:

我正在尝试使用 onclick 使按钮删除它所在的 div。我尝试了几种方法(降低可见性,使用 GetElementById,将 outerHTML 设置为 0,但我仍然卡住,希望得到帮助。

我要删除的 div 是顶部的 id 为 "Attraction.$numofatr"

$numofatr 应该是一个数字。

HTML 代码

<div id = "<?php echo "Attraction.R.$numofatr";?>" class = "attraction">
  <div class = "atr_image">
    <img src="images/oldtown.jpg" alt="">
  </div>
  <div class= "atr_container">
    <button class="button1" id = "<?php echo "R.$numofatr";?> " onclick = "Remove(this.id)">Remove Attraction</button>
  </div>
</div>

Javascript 代码

function Remove(elem){
  var Attraction = "Attraction" + document.getElementById(elem);
  elem.parentNode.removeChild( document.getElementById(Attraction));

  //NOTE - I ALSO TRIED OTHER WAYS SUCH AS:
  // document.getElementById(Attraction).outerHTML = "";
  //document.getElementById(Attraction).style.display="none";
}

注意:我对 stackoverflow 和 Web 开发还是新手。

注2:我认为$numofatr的定义是正确的,问题出在JS命令上。

注意 3:我更改了按钮 div,因为我被告知 html id 不应该是数字。问题依然存在。

注4:这是整个结构。我怀疑缺少任何 div。

<div id="<?php echo "Attraction.R.$numofatr" ; ?>" class="attraction">
  
  <div class="atr_image">
    <img src="images/oldtown.jpg" alt="">
  </div>

  <div class="atr_container">
    <div class="atr_name">
      <a><?php  echo $name; ?></a>
    </div>
    <div class="atr_region">
      <p><?php   echo $region;?> </p>
    </div>
    <div class="atr_desc">
      <p><?php  echo $desc1; ?></p>
    </div>
    <div class="atr_time_container">
      <div class="atr_time">
        <p><?php  echo $hours; ?> </p>
      </div>
      <span class="dot"></span>
      <div class="atr_hours">
        <p><?php echo $actual; ?></p>
      </div>
    </div>

    <button class="button1" id="<?php echo "R. $numofatr"?> " onclick="Remove(this.id)">Remove Attraction</button>

    <script>
      function Remove(elem) {
        var Attraction = document.getElementById("Attraction" + elem);
        Attraction.remove();
      }
    </script>
  </div>

</div>

【问题讨论】:

  • 更改此“景点”。 + document.getElementById(elem);到“吸引力”+ elem;而对于删除部分, document.getElementById(Attraction).parentNode.removeChild( document.getElementById(Attraction))
  • 这不是错误,但是如果要写正确的htmt,不能以数字开头的ID
  • 或者你可以传递Remove(this.parent.id) 并删除按钮ID。
  • @Timberman(仅供参考)如果你想编写 HTML5,你可以(已经消除了几乎所有对 ID 属性的现有限制)-通过 CSS 选择器选择这些元素将但是在这种情况下需要额外的转义,所以不推荐一开始。
  • BTW 按钮元素上方有一个未关闭的div

标签: javascript php html button


【解决方案1】:

试试这个:

<div id = "<?php echo "Attraction.$numofatr";?>" class = "attraction">

<div class = "atr_image"><img src="images/oldtown.jpg" alt=""></div>

<div class= "atr_container">



<button class="button1" id = "<?php echo "$numofatr";?> " onclick = "Remove(this.id)">Remove Attraction</button>

</div>

你的 JS 可以是这样的:

function Remove(elem){
    var Attraction = document.getElementById("Attraction"+elem);
    Attraction.remove();
}

下面是对 JSFiddle 的简单测试: https://jsfiddle.net/rv5dby92/

【讨论】:

  • 我喜欢你简化 Remove 函数的方式。我只想指出,它可以通过调用document.getElementById("Attraction"+elem).remove() 来进一步简化,而无需创建变量。
  • 谢谢,但它似乎仍然不起作用。也许问题出在其他地方
【解决方案2】:

如果你想删除&lt;div id = "&lt;?php echo "Attraction.$numofatr";?&gt;" class = "attraction"&gt;上的div

function Remove(elem){
    document.getElementById('Attraction'+elem).remove();
}

请注意,您使用的是带有数值的 id 属性。也许这在 HTML 标准中是无效的

您的代码包含elem.parentNode.removeChild 听起来像是转到元素的父元素,然后返回子元素。 对于 removeChild 从 w3schools.com 教程中尝试: https://www.w3schools.com/jsref/met_node_removechild.asp

希望你解决

【讨论】:

  • 嗨 :) 谢谢,但我的问题已经解决了。
  • 好吧 ^_^ 它可能对某人也有帮助
【解决方案3】:

看到更新后的 HTML,您似乎在每个 Attraction 块中声明了 Remove() 函数。在这种情况下,您可以简单地将匿名函数传递给onclick,该函数接收要作为闭包移除的节点。

onclick="(node => node.remove())(this.closest('.attraction'))"

<div id="Attraction1" class="attraction">
  <div class="atr_image">
    <img src="images/oldtown.jpg" alt="">
  </div>
  <div class="atr_container">
    <button class="button1" onclick="(node => node.remove())(this.closest('.attraction'))">Remove Attraction</button>
  </div>
</div>

如果您总是想删除按钮的父级,您可以简单地将parentNode 传递给Remove(),而无需查询 DOM。

onclick="Remove(this.parentNode)"

function Remove(node) {
  node.remove();
}
<div id="Attraction1" class="attraction">
  <div class="atr_image">
    <img src="images/oldtown.jpg" alt="">
  </div>
  <div class="atr_container"></div>
  <button class="button1" onclick="Remove(this.parentNode)">Remove Attraction</button>
</div>

如果您将按钮包装在 atr_container div 中,则可以使用 .closest() 传递具有相关类的最近祖先。

onclick="Remove(this.closest('.attraction'))"

function Remove(node) {
  node.remove();
}
<div id="Attraction1" class="attraction">
  <div class="atr_image">
    <img src="images/oldtown.jpg" alt="">
  </div>
  <div class="atr_container">
    <button class="button1" onclick="Remove(this.closest('.attraction'))">Remove Attraction</button>
  </div>
</div>

【讨论】:

  • 但这不会删除 atr_container 吗?我需要删除名为“Attraction1”的 div。还是谢谢你
  • 你缺少一个 div 结束标签,所以很难说出你想要的结构。
  • 这不是整个结构,我可以发布整个结构,我只是认为它不相关
  • 非常感谢 :D 你的解决方案帮我解决了这个问题
  • 我用过.closest
【解决方案4】:

您可以通过像这样创建按钮来简化此操作:

<button class="button1" onclick="Remove(this.parentElement.id)">Remove Attraction</button>

这样你的按钮就不需要id,你也不需要在你的Javascript函数中将“Attraction”连接到传递的id。

【讨论】:

  • 但 div id 将是一个数字。而且 afaik 这仍然不是有效的 html
  • @LelioFaieta 不,div id是“景点”+数字后缀。
  • 是的,但按钮 id 似乎是一个数字。我改变了它,但不幸的是它仍然不起作用
猜你喜欢
  • 2020-11-07
  • 2016-01-22
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多