[JS] 47. 検証、ノードの削除
6421 ワード
例検証#ケンショウ#
e.preventDefault()にコミットします.結果を発生させなければ、結果は見えません.
ほとんどがscriptコミットを使用するためhtml機能を使用して有効性チェックを行うのは難しい.
if(!unameInput.checkValidity()) {
// alert("이름 입력오류 : " + unameInput.validationMessage);
return;
}
e.preventDefault();
検証するとき、なぜfalseなのか分かりにくい.
checkValidity()を使用してメッセージを直接送信します.
regButton.onclick = function(e){
if(!unameInput.checkValidity()) {
// alert("이름 입력오류 : " + unameInput.validationMessage);
return;
}
e.preventDefault();
var html = '<li class="item"><input class="mr-2" type="checkbox">'+unameInput.value+'<a class="btn-close icon icon-close ml-auto" href="">삭제</a></li>';
listUl.insertAdjacentHTML("afterbegin", html);
//체크박스와 삭제 버튼(btn-close) 만들기 (css 작업 따로)
if(listUl.children.length > 0)
listUl.classList.remove("empty");
};
Element.insertAdjcentElement()はhtml、テキストノードであってもよい.
そして、どこにでも入れます.
ノードの削除
イベント処理とターゲットは一体です.
1.最初の項目を削除する場合、
delFirstButton.onclick = function(e){
e.preventDefault();
//var li =listUl.firstElementChild;
//li는 listUI의 첫번째 자식 엘리먼트이다.
//listUl.removeChild(li);
//listUI의 자식 중 li를 삭제한다.
listUl.firstElementChild.remove();
//listUI에서 첫번째 자식 엘리먼트를 삭제한다.
};
2.イベント処理とターゲットがリストの場合
プロジェクトの横に「削除ボタン」(btn-close)を作成します.
ボタンを押すと、アイテムは消えます.
listUl.onclick = function(e){
if(!e.target.classList.contains("btn-close"))
return;
e.preventDefault();
// target마다 삭제해야 할 대상이 다르다.
if(confirm("정말 삭제하시겠습니까?"))
// 정말 삭제하려고 했던 것인지 물어보자.
e.target.parentElement.remove();
//부모 노드를 삭제
if(listUl.children.length == 0)
listUl.classList.add("empty");
// 항목이 없을때의 상태를 설정해주자.
};
3.リスト全体の選択項目を削除
「一括削除ボタン」(btn-del-all)を作成します.
regButtonでチェックボックスを作成
delAllButton.onclick = function(e){
e.preventDefault();
var lis = listUl.children;
for(var i=0; i<lis.length; i++){
var checkbox = lis[i].querySelector("input[type=checkbox]");
if(checkbox.checked)
lis[i].remove();
// 체크박스에서 체크가 됐다면 삭제한다.
}
};
隣接するものを連続的に選択して削除すると、エラーが削除されます.
どうしたんですか.1つが削除されると、配列のインデックスが変更されるため、次の配列に誤って適用されます.
この問題を解決するために、後で削除します.
この操作を実行すると、
もう一つ残ってる
delAllButton.onclick = function(e){
e.preventDefault();
var lis = listUl.children;
var size = lis.length;
//var arr = Array.from(lis);
for(var i=0; i<size; i++){ // 0,1,2,3,4 : 5개 -> size
var checkbox = lis[size-1-i].querySelector("input[type=checkbox]");
// index의 최대값은 4이기 때문에 size-1에서 i를 빼나간다.
if(checkbox.checked)
lis[size-1-i].remove();
}
};
pseudo classを適用してみます.
(.クラス名:checkedを適用する場合)
チェックした場合、要素はtrue、そうでない場合nullです.
for(var i=0; i<size; i++){ // 0,1,2,3,4 : 5개 -> size
var checkbox = lis[size-1-i].querySelector("input[type=checkbox]");
if(checkbox.matches("li input:checked"))
lis[size-1-i].remove();
// input이 checked라는 pseudo 클래스가 적용된 상태라면 삭제
Reference
この問題について([JS] 47. 検証、ノードの削除), 我々は、より多くの情報をここで見つけました https://velog.io/@psh94/JS0218テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol