클래스 이름을 가진 요소를 찾기 위해 아래 코드가 있습니다.
// Get the element by their class name
var cur_columns = document.getElementsByClassName('column');
// Now remove them
for (var i = 0; i < cur_columns.length; i++) {
}
제거하는 방법을 모르겠어요 ….. 부모를 참조해야하나요? 이를 처리하는 가장 좋은 방법은 무엇입니까?
@ Karim79 :
다음은 JS입니다.
var col_wrapper = document.getElementById("columns").getElementsByTagName("div");
var len = col_wrapper.length;
alert(len);
for (var i = 0; i < len; i++) {
if (col_wrapper[i].className.toLowerCase() == "column") {
col_wrapper[i].parentNode.removeChild(col_wrapper[i]);
}
}
다음은 HTML입니다.
<div class="columns" id="columns">
<div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
<div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
<div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
<div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
<div name="columnClear" class="contentClear" id="columnClear"></div>
</div>
편집 : jQuery 옵션을 사용하여 끝났습니다.
답변
jQuery를 사용하면 (이 경우 실제로 사용할 수 있다고 생각합니다) 다음과 같이 할 수 있습니다.
$('.column').remove();
그렇지 않으면 각 요소의 부모를 사용하여 제거해야합니다.
element.parentNode.removeChild(element);
답변
JQuery를 사용하지 않으려는 경우 :
function removeElementsByClass(className){
var elements = document.getElementsByClassName(className);
while(elements.length > 0){
elements[0].parentNode.removeChild(elements[0]);
}
}
답변
ES6 를 사용 하면 다음과 같이 할 수 있습니다.
const removeElements = (elms) => elms.forEach(el => el.remove());
// Use like:
removeElements( document.querySelectorAll(".remove") );
<p class="remove">REMOVE ME</p>
<p>KEEP ME</p>
<p class="remove">REMOVE ME</p>
답변
jQuery 또는 ES6없이 순수 자바 스크립트에서는 다음을 수행 할 수 있습니다.
const elements = document.getElementsByClassName("my-class");
while (elements.length > 0) elements[0].remove();
답변
이것은 나를 위해 작동합니다
while (document.getElementsByClassName('my-class')[0]) {
document.getElementsByClassName('my-class')[0].remove();
}
답변
Brett- quirksmode에 따라getElementyByClassName
IE 5.5에서 8까지의 지원이 없다는 것을 알고 있습니까?. 브라우저 간 호환성에 관심이 있다면이 패턴을 따르는 것이 좋습니다.
- ID로 컨테이너 요소를 가져옵니다.
- 태그 이름으로 필요한 자식 요소를 가져옵니다.
- 자식을 반복하고 className 속성과 일치하는지 테스트합니다.
elements[i].parentNode.removeChild(elements[i])
다른 사람들이 말한 것처럼.
빠른 예 :
var cells = document.getElementById("myTable").getElementsByTagName("td");
var len = cells.length;
for(var i = 0; i < len; i++) {
if(cells[i].className.toLowerCase() == "column") {
cells[i].parentNode.removeChild(cells[i]);
}
}
편집 : 다음은 마크 업에 특정한 고정 버전입니다.
var col_wrapper = document.getElementById("columns").getElementsByTagName("div");
var elementsToRemove = [];
for (var i = 0; i < col_wrapper.length; i++) {
if (col_wrapper[i].className.toLowerCase() == "column") {
elementsToRemove.push(col_wrapper[i]);
}
}
for(var i = 0; i < elementsToRemove.length; i++) {
elementsToRemove[i].parentNode.removeChild(elementsToRemove[i]);
}
문제는 내 잘못이었습니다. 결과 요소 배열에서 요소를 제거하면 길이가 변경되므로 각 반복에서 하나의 요소를 건너 뜁니다. 해결책은 각 요소에 대한 참조를 임시 배열에 저장 한 다음 그에 대해 반복하여 DOM에서 각 요소를 제거하는 것입니다.
답변
나는 forEach
오버 for
/ while
루핑을 선호합니다 . 사용 HTMLCollection
하려면 Array
먼저 변환 해야합니다 .
Array.from(document.getElementsByClassName("post-text"))
.forEach(element => element.remove());
주의하세요. 가장 효율적인 방법은 아닙니다. 나를 위해 훨씬 더 우아합니다.