Javascript kullanarak bir HTML öğesi nasıl kaldırılır?


124

Ben tam bir acemiyim. Biri bana bir HTML öğesini jQuery değil orijinal Javascript kullanarak nasıl kaldıracağımı söyleyebilir mi?

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

Gönder düğmesini tıkladığımda olan şey, çok kısa bir süre için kaybolacak ve ardından hemen görünecek olmasıdır. Düğmeye tıkladığımda öğeyi tamamen kaldırmak istiyorum.


Ya tıklarsam, bir hatayı görürsem ve durdur tuşuna basarsam ?
alex

Üzgünüm, konu konusu ama aslında gerçekten komik, kendisine "Yeni Başlayanlar" adını vermesi ve şimdi profilin 9000 civarında bir üne sahip olması. "Eski güzel zamanlarda" bir şey sormak bugünlerde gerçekten karlı. :)
Rene

Yanıtlar:


189

Olan şey, formun gönderilmesidir ve bu nedenle sayfa (orijinal içeriğiyle) yenilenmektedir. Sen hallediyoruz clickbir gönder düğmesi üzerine olay.

Eğer eleman kaldırıp istiyorsanız değildir formu göndermek, işlemek submityerine forma olayı ve iade falsesenin işleyicisinden:

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;
}

Ancak bunun için bir forma ihtiyacınız yoktur (veya istemezsiniz), tek amacı kukla div'i kaldırmak değilse. Yerine:

HTML:

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

JavaScript:

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

Ancak , olay işleyicileri kurma tarzı eski modadır. JavaScript kodunuzun kendi dosyasında olması konusunda iyi içgüdüleriniz var gibi görünüyor. Sonraki adım, bunu daha ileri götürmek ve onXYZolay işleyicilerini bağlamak için öznitelikleri kullanmaktan kaçınmaktır . Bunun yerine, JavaScript'inizde, bunları daha yeni (yaklaşık 2000 yılı) yolla bağlayabilirsiniz:

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;
    }
}

... sonra çağrı pageInit();bir gelen scriptsayfanızın en sonunda etiketi body(sadece kapanış önce </body>etiketi) ya içinden window loadolur da, olayın çok geç sayfa yükleme döngüsünde ve böylece genellikle olayı bağlamak için iyi değil işleyiciler ( örneğin, tüm resimler nihayet yüklendikten sonra gerçekleşir ).

Tarayıcı farklılıklarıyla başa çıkmak için biraz işlem yapmam gerektiğini unutmayın. Muhtemelen olayları birleştirmek için bir işlev isteyeceksiniz, böylece bu mantığı her seferinde tekrarlamanız gerekmez. Veya sizin için bu tarayıcı farklılıklarını düzeltmek için jQuery , Prototype , YUI , Closure veya diğer birkaç kitaplık gibi bir kitaplık kullanmayı düşünün . Bu var çok önemli yatan şeyler JavaScript temelleri ve DOM temelleri açısından hem de devam anlamak için, ancak kütüphaneler tutarsızlıklar bir sürü başa ve aynı zamanda kullanışlı araçlardan bir sürü sağlamak - Olay işleyicileri o kadar çengel aracı gibi fırsatlar ile tarayıcı farklılıkları. Çoğu aynı zamanda bir işlevi ayarlamak için bir yol sağlar (örneğinpageInit) DOM tetiklenmeye hazır olur olmaz, window loadyangınlardan çok önce çalıştırılır .


JS işlevinize değiştirin type="button"veya return false;ekleyin
Pav

@Pav: Sanırım bunu sunmaya devam edeceğim çünkü bu sadece deneysel bir egzersiz. Ben gönderi kullanan projeler yapacağım, böylece alışsam iyi olur ... Fikir için yine de teşekkürler.
Newbie Coder

@Newbie: Birkaç not daha ekledim.
TJ Crowder

2
neden sadece elem.remove () yapmıyorsunuz;
Muhammad Umer

1
@ Ghos3t - Birkaç yol: 1. Öznitelik tarzı bir işleyiciden çağırdığınız herhangi bir işlev global olmalıdır ve global ad alanı zaten Really Crowded ™ ve başka bir şeyle çakışan bir işlev adı seçmek kolaydır (bu Olası benzersiz bir ada sahip bir nesne kullanarak ve tüm işleyicilerinizi üzerine koyarak ele alınabilir). 2. Eski öznitelik tarzı yöntemi kullanın (veya öğedeki onxyzözelliğe atama ) yalnızca tek bir işleyiciye izin verir ve özelliği atarsanız, eskiden var olanı değiştirirseniz, böylece başkalarıyla iyi oynamaz. (devamı)
TJ Crowder

34

Sadece bunu yap element.remove();

Burada deneyin BAKIN

http://jsfiddle.net/4WGRP/


5
Buna dikkat edin, çünkü bu oldukça yeni bir eklenti gibi görünüyor ve tam tarayıcı desteğine sahip değil, yani IE ve FF sürüm 22 ve öncesi ( red-team-design.com/… ).
dule

1
Şahsen bunu kullanmak için 5 yıl daha
beklerdim

2
Görünüşe göre bu artık başarısız bir şekilde destekleniyor: caniuse.com/#search=remove . Şimdi kullanmayı kabul ediyorum. IE11'i kesinlikle desteklemeniz gerekiyorsa, sanırım bir polyfill kolayca inşa edilebilir ...
jehon

5
Geleceğe yönelik kod yazmak, geçmiş için programlamadan daha iyidir. Kendinize bakım süresinden .remove()
tasarruf edin

9

İnput type = "submit" yerine input type = "button" kullanmalısınız.

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

Ödeme Mozilla Geliştirici Merkezi temel html ve javascript kaynaklar için


1
Bağlantınızı W3Schools'tan Mozilla Geliştirici Merkezi'ne değiştirdim. Mantığım için w3fools.com'a bir göz atın ... Bunun dışında iyi cevap :)
Alastair Pitts

2
@Alastair Pitts - sorun değil. Sadece
PO'yu

8

JavaScript'iniz doğru. type="submit"Sayfanın yenilenmesine neden olan düğmeniz var .


5

Gönder düğmeniz sayfayı yeniden yüklediği için yeniden görünür. Bu davranışı önlemenin en basit yolu return false, onclickbenzerlerine bir eklemektir :

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

4

Giriş türünü "düğme" olarak değiştirin. TJ ve Pav dediği gibi, form teslim ediliyor. Javascript'iniz doğru görünüyor ve JQuery olmayan bir şekilde denediğiniz için sizi takdir ediyorum :)


Sanırım göndermeye devam edeceğim çünkü bu, gönder'i kullanan gelecekteki projelerim için deneysel bir alıştırma, bu yüzden buna
alışmalıyım

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

Doğru kod bu. Muhtemelen olan şey, formunuzun gönderilmesidir ve yeni sayfayı (öğenin tekrar var olacağı) görüyorsunuz.


3

Bu kodu komut dosyanızda çalıştırmayı deneyin .

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

Ve umarım öğeyi / düğmeyi kaldırır.


2

Bu çalışıyor. Düğmeyi divtutmak istiyorsanız, düğmeyi "kukla" dan çıkarmanız yeterlidir .

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

Ben de hala acemiyim, ancak işte basit ve kolay bir yol: Sadece bir kısmı değil, tüm etiketi olan OuterHTML'yi kullanabilirsiniz:

EX: <tag id='me'>blahblahblah</tag>'ın innerHTML'si olurdu blahblahblahve externalHTML de her şey olurdu <tag id='me'>blahblahblah</tag>.


Bu nedenle, örneğin, etiketi silmek istiyorsanız, temelde verilerini silmektir, bu nedenle, dış HTML'yi boş bir dizeye değiştirirseniz, bu onu silmek gibidir.

<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>

Bunun yerine, sadece görüntülemek istemiyorsanız, görünürlük, opaklık ve görüntüleme özelliklerini kullanarak JS'de stil verebilirsiniz.

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



Unutmayın ki opacity öğe hala görüntülenir, ancak onu o kadar fazla göremezsiniz. Ayrıca, metin seçebilir, kopyalayabilir, yapıştırabilir ve görünmez olsa bile normalde yapabileceğiniz her şeyi yapabilirsiniz.
Visibility durumunuza daha çok uyuyor, ancak uygulandığı öğe kadar büyük bir boş şeffaf alan bırakacaktır.
Web sayfanızı nasıl yaptığınıza bağlı olarak görüntülemenizi tavsiye ederim. Görüntünüzden temel olarak öğeyi silerek görüntüleyin, ancak yine de DevTools'ta görebilirsiniz. Bu yardımcı olur umarım!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.