Как удалить элемент HTML с помощью Javascript? - PullRequest
113 голосов
/ 09 мая 2011

Я абсолютный новичок. Может кто-нибудь сказать мне, как удалить элемент HTML, используя оригинальный Javascript, а не jQuery.

index.html

<html>
<head>
 <script type="text/javascript" src="myscripts.js" > </script>
 <style>
 #dummy {
  min-width: 200px;
  min-height: 200px;
  max-width: 200px;
  max-height: 200px;
  background-color: #fff000;
 }
 </style>
</head>
<body>
 <div id="dummy"></div>

 <form>
  <input type="submit" value="Remove DUMMY" onclick="removeDummy(); "/>
 </form>
</body>

myscripts.js

function removeDummy() {
 var elem = document.getElementById('dummy');
 elem.parentNode.removeChild(elem);
}

Что произойдет, когда я нажму кнопку отправки, это то, что она исчезнет в течение очень очень короткого времени, а затем сразу же появится снова. Я хочу полностью удалить элемент, когда нажимаю кнопку.

Ответы [ 11 ]

170 голосов
/ 09 мая 2011

Происходит то, что форма отправляется, и поэтому страница обновляется (с ее исходным содержимым). Вы обрабатываете событие click для кнопки отправки.

Если вы хотите удалить элемент и , а не отправить форму, обработайте вместо нее событие submit в форме и верните false из вашего обработчика:

HTML:

<form  onsubmit="return removeDummy(); ">
    <input type="submit" value="Remove DUMMY"/>
</form>

JavaScript:

function removeDummy() {
    var elem = document.getElementById('dummy');
    elem.parentNode.removeChild(elem);
    return false;
}

Но вам вообще не нужна (или не нужна) форма для этого, если только ее единственная цель - удалить фиктивный элемент div. Вместо этого:

HTML:

<input type="button" value="Remove DUMMY" onclick="removeDummy()" />

JavaScript:

function removeDummy() {
    var elem = document.getElementById('dummy');
    elem.parentNode.removeChild(elem);
    return false;
}

Однако , этот стиль установки обработчиков событий старомоден. Кажется, у вас есть хорошие инстинкты в том, что ваш код JavaScript находится в своем собственном файле и тому подобное. Следующим шагом будет дальнейшее продвижение и избегание использования атрибутов onXYZ для подключения обработчиков событий. Вместо этого в вашем JavaScript вы можете подключить их более новым способом (около 2000 года):

HTML:

<input id='btnRemoveDummy' type="button" value="Remove DUMMY"/>

JavaScript:

function removeDummy() {
    var elem = document.getElementById('dummy');
    elem.parentNode.removeChild(elem);
    return false;
}
function pageInit() {
    // Hook up the "remove dummy" button
    var btn = document.getElementById('btnRemoveDummy');
    if (btn.addEventListener) {
        // DOM2 standard
        btn.addEventListener('click', removeDummy, false);
    }
    else if (btn.attachEvent) {
        // IE (IE9 finally supports the above, though)
        btn.attachEvent('onclick', removeDummy);
    }
    else {
        // Really old or non-standard browser, try DOM0
        btn.onclick = removeDummy;
    }
}

... затем вызовите pageInit(); из тега script в самом конце вашей страницы body (непосредственно перед закрывающим тегом </body>) или из события window load, хотя это происходит очень поздно в цикле загрузки страницы и поэтому обычно не подходит для подключения обработчиков событий (это случается после , например, когда все изображения наконец-то загрузились).

Обратите внимание, что мне пришлось немного обработать браузер. Возможно, вам понадобится функция для подключения событий, поэтому вам не придется каждый раз повторять эту логику. Или рассмотрите возможность использования библиотеки, такой как jQuery , Прототип , YUI , Закрытие или любой из нескольких других для сгладить эти различия браузера для вас. очень важно понимать, что происходит в основе, как с точки зрения основ JavaScript, так и основ DOM, но библиотеки имеют дело с большим количеством несоответствий, а также предоставляют множество удобных утилит & mdash; как средство подключения обработчиков событий, которые имеют дело с различиями браузера. Большинство из них также предоставляют способ настроить функцию (например, pageInit) для запуска, как только DOM будет готов к работе, задолго до того, как window load сработает.

28 голосов
/ 10 июля 2013

Просто сделай это element.remove();

Попробуй здесь Смотри

http://jsfiddle.net/4WGRP/

9 голосов
/ 09 мая 2011

Вы должны использовать input type = "button" вместо input type = "submit".

<form>
  <input type="button" value="Remove DUMMY" onclick="removeDummy(); "/>
 </form>

Оформить заказ Центр разработчиков Mozilla для базовых ресурсов HTML и JavaScript

8 голосов
/ 09 мая 2011

Ваш JavaScript правильный.Ваша кнопка имеет type="submit", что вызывает обновление страницы.

5 голосов
/ 09 мая 2011

Появляется снова, потому что ваша кнопка отправки перезагрузит страницу.Самый простой способ предотвратить такое поведение - добавить return false к onclick следующим образом:

<input type="submit" value="Remove DUMMY" onclick="removeDummy(); return false;" />
4 голосов
/ 09 мая 2011

Измените тип ввода на «кнопку». Как и Т.Дж. и Пав сказал, что форма отправляется. Ваш Javascript выглядит правильно, и я рекомендую вам попробовать его не-JQuery способом:)

3 голосов
/ 18 января 2016

Это работает. Просто удалите кнопку из «пустышки» div, если хотите удержать кнопку.

function removeDummy() {
  var elem = document.getElementById('dummy');
  elem.parentNode.removeChild(elem);
  return false;
}
#dummy {
  min-width: 200px;
  min-height: 200px;
  max-width: 200px;
  max-height: 200px;
  background-color: #fff000;
}
<div id="dummy">
  <button onclick="removeDummy()">Remove</button>
</div>
3 голосов
/ 09 мая 2011

Это правильный код.Вероятно, происходит то, что ваша форма отправляется, и вы видите новую страницу (где элемент снова будет существовать).

1 голос
/ 19 февраля 2016

Я все еще новичок, но вот один простой и легкий способ: вы можете использовать externalHTML, который является целым тегом, а не просто частью:

EX: <tag id='me'>blahblahblah</tag> innerHTMLбудет blahblahblah, а externalHTML будет всем, <tag id='me'>blahblahblah</tag>.


Так, например, если вы хотите удалить тег, это в основном удаление его данных, поэтому, если вы измените externalHTML на пустую строку, это все равно, что удалить ее.
<body>
    <p id="myTag">This is going to get removed...</p>
    <input type="button" onclick="javascript:
        document.getElementById('myTag').outerHTML = '';//this makes the outerHTML (the whole tag, not what is inside it)
    " value="Remove Praragraph">
</body>

Вместо этого,если вы хотите просто не отображать его, вы можете стилизовать его в JS, используя свойства видимости, непрозрачности и отображения.

document.getElementById('foo').style.visibility = hidden;
//or
document.getElementById('foo').style.opacity = 0;
//or
document.getElementById('foo').style.display = none;



Обратите внимание, что opacity заставляет элемент все еще отображаться, просто вы не можете видеть его так же.Кроме того, вы можете выделять текст, копировать, вставлять и делать все, что обычно можете делать, даже если он невидим.
Visibility больше соответствует вашей ситуации, но оставит пустое прозрачное пространство размером с элемент, которым он былПрименимо к.
Я бы порекомендовал вам показывать, в зависимости от того, как вы делаете свою веб-страницу.Показать в основном удаление элемента из вашего представления, но вы все равно можете увидеть его в DevTools.Надеюсь, это поможет!
0 голосов
/ 20 марта 2018

index.html

<input id="suby" type="submit" value="Remove DUMMY"/>

myscripts.js

document.addEventListener("DOMContentLoaded", {
//Do this AFTER elements are loaded

    document.getElementById("suby").addEventListener("click", e => {
        document.getElementById("dummy").remove()
    })

})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...