admin管理员组文章数量:1026125
I have an html code,
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<button class="btn" />
<div class="ch">ch 2</div>
<button class="btn" />
<div class="ch">ch 3</div>
<button class="btn" />
<div class="ch">ch 4</div>
<button class="btn" />
</div>
If a user click the button with class "btn", it will delete the "ch" div and the corresponding button. for example,
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<button class="btn" />
<div class="ch">ch 2</div>
<button class="btn" />
<div class="ch">ch 3</div>
<button class="btn" />
</div>
I tried to add ID of div. but It is difficult since the div with class "ch", is dynamically created.
So I want to delete a div that only have className.
I have an html code,
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<button class="btn" />
<div class="ch">ch 2</div>
<button class="btn" />
<div class="ch">ch 3</div>
<button class="btn" />
<div class="ch">ch 4</div>
<button class="btn" />
</div>
If a user click the button with class "btn", it will delete the "ch" div and the corresponding button. for example,
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<button class="btn" />
<div class="ch">ch 2</div>
<button class="btn" />
<div class="ch">ch 3</div>
<button class="btn" />
</div>
I tried to add ID of div. but It is difficult since the div with class "ch", is dynamically created.
So I want to delete a div that only have className.
Share Improve this question edited Apr 6, 2015 at 11:29 Pinas De Radio asked Apr 6, 2015 at 10:13 Pinas De RadioPinas De Radio 1232 silver badges7 bronze badges4 Answers
Reset to default 3If a user click the div with class "ch", it will delete. for example,
I'm sorry, I pletely missed this when first answering your question.
Two ways you can do that:
If you hook up a
click
handler, within the call to the handler,this
will refer to the element that was clicked. So:var list = document.querySelectorAll("#listing .ch"); var n; for (n = 0; n < list.length; ++n) { list[n].addEventListener("click", function() { this.parentNode.removeChild(this); }, false); }
But since you say these are dynamically generated, I'd use event delegation, the fact that clicks bubble up to ancestor elements, and just hook
click
on#listing
:document.getElementById("listing").addEventListener("click", function(e) { // Find the .ch, starting with the element the click originated in var ch = e.target; while (ch && !ch.className.match(/\bch\b/)) { ch = ch.parentNode; } if (ch) { ch.parentNode.removeChild(ch); } }, false);
Here's a live example of the delegation version:
document.getElementById("listing").addEventListener("click", function(e) {
// Find the .ch, starting with the element the click originated in.
// You need this loop if there's any possibility of any elements
// *within* the .ch elements, such as `em` or `strong` or `span`.
var ch = e.target;
while (ch && !ch.className.match(/\bch\b/)) {
ch = ch.parentNode;
}
if (ch) {
ch.parentNode.removeChild(ch);
}
}, false);
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch"><em>ch 2</em></div>
<div class="ch"><strong>ch 3</strong></div>
<div class="ch">ch 4</div>
</div>
Original answer that missed that relevant point!
On any modern browser, you can do this:
document.querySelector("#listing div:nth-child(3)").remove();
Live example:
setTimeout(function() {
document.querySelector("#listing div:nth-child(3)").remove();
}, 500);
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
On slightly older browsers you may need:
var element = document.querySelector("#listing div:nth-child(3)");
element.parentNode.removeChild(element);
Live example:
setTimeout(function() {
var element = document.querySelector("#listing div:nth-child(3)");
element.parentNode.removeChild(element);
}, 500);
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
Those both use :nth-child
, which matches the nth child element inside its parent. (Note that it doesn't match the nth matching child, the div
is just there for clarity.)
They also use querySelector
, which is supported on all modern browsers, and also IE8.
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
Simple use each function to get all divs
$('.ch').click(function(){
if($(this).text() == 'ch 1'){
$(this).remove();
}
});
output:
<div id="listing">
Text Message
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
jquery:
$(document).on('click','.ch',function(){
$(this).remove();
});
jsfiddle
The below solution works only if your mark up is as exactly as you have given.
//This solution will not work if the .ch element has another class or has another descendant element
document.querySelector('#listing').addEventListener('click', function(e) {
if (e.target.className = 'ch') { //or if(e.target.classList.contains('ch')){
this.removeChild(e.target)
}
})
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
Another choice is to iterate over all the ch elements and then register a click handler to it
I have an html code,
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<button class="btn" />
<div class="ch">ch 2</div>
<button class="btn" />
<div class="ch">ch 3</div>
<button class="btn" />
<div class="ch">ch 4</div>
<button class="btn" />
</div>
If a user click the button with class "btn", it will delete the "ch" div and the corresponding button. for example,
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<button class="btn" />
<div class="ch">ch 2</div>
<button class="btn" />
<div class="ch">ch 3</div>
<button class="btn" />
</div>
I tried to add ID of div. but It is difficult since the div with class "ch", is dynamically created.
So I want to delete a div that only have className.
I have an html code,
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<button class="btn" />
<div class="ch">ch 2</div>
<button class="btn" />
<div class="ch">ch 3</div>
<button class="btn" />
<div class="ch">ch 4</div>
<button class="btn" />
</div>
If a user click the button with class "btn", it will delete the "ch" div and the corresponding button. for example,
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<button class="btn" />
<div class="ch">ch 2</div>
<button class="btn" />
<div class="ch">ch 3</div>
<button class="btn" />
</div>
I tried to add ID of div. but It is difficult since the div with class "ch", is dynamically created.
So I want to delete a div that only have className.
Share Improve this question edited Apr 6, 2015 at 11:29 Pinas De Radio asked Apr 6, 2015 at 10:13 Pinas De RadioPinas De Radio 1232 silver badges7 bronze badges4 Answers
Reset to default 3If a user click the div with class "ch", it will delete. for example,
I'm sorry, I pletely missed this when first answering your question.
Two ways you can do that:
If you hook up a
click
handler, within the call to the handler,this
will refer to the element that was clicked. So:var list = document.querySelectorAll("#listing .ch"); var n; for (n = 0; n < list.length; ++n) { list[n].addEventListener("click", function() { this.parentNode.removeChild(this); }, false); }
But since you say these are dynamically generated, I'd use event delegation, the fact that clicks bubble up to ancestor elements, and just hook
click
on#listing
:document.getElementById("listing").addEventListener("click", function(e) { // Find the .ch, starting with the element the click originated in var ch = e.target; while (ch && !ch.className.match(/\bch\b/)) { ch = ch.parentNode; } if (ch) { ch.parentNode.removeChild(ch); } }, false);
Here's a live example of the delegation version:
document.getElementById("listing").addEventListener("click", function(e) {
// Find the .ch, starting with the element the click originated in.
// You need this loop if there's any possibility of any elements
// *within* the .ch elements, such as `em` or `strong` or `span`.
var ch = e.target;
while (ch && !ch.className.match(/\bch\b/)) {
ch = ch.parentNode;
}
if (ch) {
ch.parentNode.removeChild(ch);
}
}, false);
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch"><em>ch 2</em></div>
<div class="ch"><strong>ch 3</strong></div>
<div class="ch">ch 4</div>
</div>
Original answer that missed that relevant point!
On any modern browser, you can do this:
document.querySelector("#listing div:nth-child(3)").remove();
Live example:
setTimeout(function() {
document.querySelector("#listing div:nth-child(3)").remove();
}, 500);
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
On slightly older browsers you may need:
var element = document.querySelector("#listing div:nth-child(3)");
element.parentNode.removeChild(element);
Live example:
setTimeout(function() {
var element = document.querySelector("#listing div:nth-child(3)");
element.parentNode.removeChild(element);
}, 500);
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
Those both use :nth-child
, which matches the nth child element inside its parent. (Note that it doesn't match the nth matching child, the div
is just there for clarity.)
They also use querySelector
, which is supported on all modern browsers, and also IE8.
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
Simple use each function to get all divs
$('.ch').click(function(){
if($(this).text() == 'ch 1'){
$(this).remove();
}
});
output:
<div id="listing">
Text Message
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
jquery:
$(document).on('click','.ch',function(){
$(this).remove();
});
jsfiddle
The below solution works only if your mark up is as exactly as you have given.
//This solution will not work if the .ch element has another class or has another descendant element
document.querySelector('#listing').addEventListener('click', function(e) {
if (e.target.className = 'ch') { //or if(e.target.classList.contains('ch')){
this.removeChild(e.target)
}
})
<div id="listing">
Text Message
<div class="ch">ch 1</div>
<div class="ch">ch 2</div>
<div class="ch">ch 3</div>
<div class="ch">ch 4</div>
</div>
Another choice is to iterate over all the ch elements and then register a click handler to it
本文标签: htmlHow to delete a specific element inside a div using javascriptStack Overflow
版权声明:本文标题:html - How to delete a specific element inside a div using javascript? - Stack Overflow 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/questions/1745634384a2160354.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论