Як видалити HTML-елемент за допомогою Javascript?


124

Я абсолютно новачок. Хтось може сказати мені, як видалити HTML-елемент за допомогою оригіналу Javascript not 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);
}

Що відбувається, коли я натискаю кнопку "Надіслати", це те, що вона зникне протягом дуже короткого часу, а потім з'явиться знову. Я хочу повністю видалити елемент, коли натискаю кнопку.


Що робити, якщо я натискаю на неї, помічаю помилку та натискаю кнопку " Стоп" ?
alex

Вибачте, це тема, але насправді дуже смішно, що він / вона назвала себе "кодером для початківців", і тепер у профілю є репутація близько 9000. Попросити щось у "старі добрі часи" сьогодні дуже вигідно. :)
Рене

Відповіді:


189

Що відбувається, це те, що форма надсилається, і тому сторінка оновлюється (з оригінальним вмістом). Ви обробляєте 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;
}

Але вам взагалі не потрібна (або хочете) форма для цього, навіть якщо її єдиною метою є видалення манекена. Замість цього:

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 , Prototype , YUI , Closing або будь-який з інших, щоб згладити ці браузерні відмінності. Це дуже важливо , щоб зрозуміти основний матеріал відбувається, як з точки зору фундаментальних JavaScript і основ DOM, але бібліотеки мають справу з великою кількістю невідповідностей, а також забезпечити багато корисних утиліт - як засіб підключення обробників подій, які розглядаються відмінності браузера. Більшість із них також надають спосіб налаштування функції (наприкладpageInit) запуститись, як тільки DOM буде готовий до маніпулювання, задовго до window loadпожеж.


Змініть його type="button"або поставте return false;у своїй функції JS
Пав

@Pav: Я думаю, я буду дотримуватися подання, тому що це просто експериментальна вправа. Я буду робити якісь проекти, які використовують подати, тому я краще звикнути до нього ... Все одно дякую за ідею.
Новачок-кодер

@Newbie: Я додав ще кілька записок.
TJ Crowder

2
чому б просто не зробити elem.remove ();
Мухаммед Умер

1
@ Ghos3t - декілька способів: 1. Будь-яка функція, яку ви викликаєте з обробника стилю атрибутів, повинна бути глобальною, а глобальний простір імен вже справді переповнений ™, і легко вибрати ім’я функції, що суперечить чомусь іншому (це можна вирішити, скориставшись об'єктом з імовірним унікальним іменем, хоча і розмістити на ньому всі ваші обробники). 2. Використовувати старий спосіб атрибутичного стилю (або присвоювати onxyzвластивість елементу) дозволяє лише один обробник, і якщо ви присвоюєте властивість, ви замінюєте те, що раніше було там, тому він не грає добре з іншими. (продовження)
TJ Crowder

34

Просто зробіть це element.remove();

Спробуйте тут ГОЛОВНЯ

http://jsfiddle.net/4WGRP/


5
Будьте обережні з цим, оскільки це, здається, є досить новим доповненням, і не має повної підтримки браузера, а саме IE та FF версій 22 і новіших ( red-team-design.com/… ).
дуле

1
Я особисто зачекав ще 5 років, щоб скористатися цим
slebetman

2
Ну, здається, це зараз дуже підтримується: caniuse.com/#search=remove . Я б погодився використовувати його зараз. Якщо вам абсолютно потрібна підтримка IE11, я вважаю, що поліфіл може бути легко побудований ...
jehon

5
Написання коду, що підтверджує майбутнє, краще, ніж програмування на минуле. Економте собі час технічного обслуговування та користуйтеся.remove()
Gibolt

9

Ви повинні використовувати тип вводу = "кнопка" замість типу введення = "подати".

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

Оформити замовлення Центру розробників Mozilla на основні ресурси HTML та javascript


1
Я змінив ваше посилання з W3Schools на центр розробників Mozilla. Погляньте на w3fools.com для моїх міркувань ... Окрім цього, хороша відповідь :)
Аластер Піттс

2
@Alastair Pitts - все гаразд. Я просто хочу вказати PO на html та js основні підручники ..
CoderHawk

8

Ваш правильний JavaScript. Ваша кнопка має те, type="submit"що призводить до оновлення сторінки.


5

Він з’являється знову, оскільки кнопка надсилання перезавантажує сторінку. Найпростіший спосіб запобігти таку поведінку , щоб додати return falseдо onclickнаступним чином:

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

4

Змініть тип введення на "кнопку". Як сказали TJ та Пав, форма надсилається. Ваш Javascript виглядає правильно, і я вдячний вам за те, що ви спробували його не-JQuery способом :)


Я думаю, що я буду дотримуватися подання, тому що це просто експериментальна вправа для моїх майбутніх проектів, які використовують подати, тому я краще звикнути до цього ...
Newbie Coder

4

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()
    })

})

3

Це правильний код. Можливо, те, що ваша форма надсилається, ви бачите нову сторінку (де елемент знову буде існувати).


3

Спробуйте запустити цей код у своєму сценарії .

document.getElementById("dummy").remove();

І це, сподіваємось, видалить елемент / кнопку.


2

Це працює. Просто вийміть кнопку з "манекена", 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>


1

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

EX: <tag id='me'>blahblahblah</tag>«s innerHTML буде blahblahblah, і outerHTML б все це, <tag id='me'>blahblahblah</tag>.


Так, наприклад, якщо ви хочете видалити тег, він в основному видаляє його дані, тож якщо ви зміните зовнішній HTML в порожній рядок, це як видалення.

<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. Сподіваюся, це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.