dom操作
51032 ワード
document object
documentはブラウザがロードしたページを表します.
すべてはドキュメントから始まり、html要素をJavaScriptにインポートすることで変更できます.
ドキュメントをログ出力オブジェクトとして使用するとhtmlタグの内容が表示されます.
出力がdirの場合、オブジェクトのプロパティは階層として出力されます.
searching for elements
単一の要素を返す
=>helloはclass内部のh 1(id)をインポートできます.
=>最初のelement
=>3つのh 1を含むarray
ただし、後者はサブエレメントをインポートできません.
event
elementの内部を表示する場合はconsoleを使用します.dir()
デフォルトobjectの要素を表示(すべてjs object)
その前にonを付けたのはイベント
title.addEventListener(「click」):誰かをリスニングしてtitleをクリック→何かする必要がある
document.body.style~のコマンドは許可されていますがdivなどのコマンドは呼び出せません
その他の要素はquerySelectorまたはgetElementByIdとしてロードする必要があります
title.onclick = handleMouseEnter;
title.addEventListener(“mouseenter” , handleMouseEnter);
위에 두 코드는 동일하나 addEventListener를 선호하는 이유는
removeEventListener을 통해서 event listener을 제거할수있기 때문이다.
const title = document.querySelector(".hello:first-child h1");
function handleTitleClick(){
title.style.color = "blue";
}
function handleMouseEnter(){
title.innerText = "mouse is here!";
}
function handleMouseLeave(){
title.innerText = "mouse is gone!";
}
function handleWindowResize(){
document.body.style.backgroundColor = “tomato”;
}
function handleWindowCopy(){
alert(“copier”);
}
title.addEventListener("click",handleTitleClick);
title.addEventListener("mouseenter", handleMouseEnter);
title.addEventListener("mouseleave", handleMouseLeave);
window.addEventListener(“resize”, handleWindowResize);
window.addEventListener(“copy”, handleWindowCopy);
css in javascript
function handleTitleClick(){
//현재 색상을 변수로 지정
const currentColor = h1.style.color;
//변화 후!! 색상을 변수로 지정
let newColor
if(currentColor === 'blue'){
newColor = 'tomato';
} else {
newColor = 'blue';
}
//조건문을 통한 newColor를 색상으로 지정
h1.style.color = newColor;
}
cssファイルでh1 {
color: cornflowerblue;
}
.clicked {
color: tomato;
}
メモjsファイルで
const h1 = document.querySelector("div.hello:first-child h1");
function handleTitleClick() {
if(h1.className === "clicked") {
h1.className = "";
} else {
h1.className = "clicked";
}
}
h1.addEventListener("click", handleTitleClick);
薄曇りここで、JSはHTMLを変更し、CSSはHTMLを表示してstyleを変更します.
これはjsでstyleを直接変更するよりも良いです.
function handleTitleClick() {
//raw value를 그대로 입력하다 오타가 발생할 수 있으므로 변수로 지정
const clickedClass = "clicked";
if(h1.className === clickedClass) {
h1.className = "";
} else {
h1.className = clickedClass;
}
}
以前のクラスが何であれ、classNameはすべてのクラスを置き換えます.classListでは、クラスをリストとして使用できます.
classListにはいくつかの関数が含まれています.
constainsという名前の関数は、指定したクラスがHTML要素のクラスに含まれているかどうかをチェックします.
removeという名前の関数は、指定したclass nameを削除します.
add関数は指定したclass nameを追加します.
function handleTitleClick() {
const clickedClass = "clicked";
if(h1.classList.contains(clickedClass)) {
h1.classList.remove(clickedClass);
} else {
h1.classList.add(clickedClass);
}
}
より良い機能があります.スイッチ関数はclass nameが存在するかどうかを確認します.class nameが存在する場合、スイッチはclass nameを削除し、class nameが存在しない場合、スイッチはclass nameを追加します.
function handleTitleClick() {
h1.classList.toggle("clicked");
}
スイッチは開いたままで閉まっているボタンですfunction onLoginSubmit(event){
// 브라우저가 기본 동작을 실행하지 못하게 막기
// event object는 preventDefault함수를 기본적으로 갖고 있음
event.preventDefault();
console.log(event);
}
// submit 이벤트가 발생한다면, onLoginSubmit함수를 실행시킨다는 의미
// JS는 onLoginSubmit함수 호출시 인자를 담아서 호출함. 해당 인자는 event object를 담은 정보들
loginForm.addEventListener("submit", onLoginSubmit);
フォームをコミットすると、ブラウザはデフォルトでページをリフレッシュします.<<私たちが望んでいるものではありません.innerTextは差異innerHTML
どちらも使用できますが、ブラウザで実行されるHTMLを含むにはinnerHTMLを使用する必要があります.
localstorageへの保存方法
localStorage.setItem("鍵名"、"値");//ちょぞう
localStorage.getItem("KEY名");//取得
setInterval,setTimeout,date
const clock = document.querySelector('#clock');
function getClock() {
//호출하는 당시의 현재날짜랑 시간을 알려줌.
const date = new Date();
clock.innerText = `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
}
// 바로 실행(setTimeout,setInterval은 바로 실행 안하므로 getClock 함수 작성)
getClock();
// 1초 기다렸다 한번만 실행
//setTimeout(getClock, 1000);
// 1초 마다 실행.
setInterval(getClock, 1000);
dateの前にnewの理由を書きます.//概要:newは新しいオブジェクトの作成に使用(新しい日付オブジェクトのみ作成)
コンソールにDateを入力します.入力するとfunctionとしてプロンプトが表示されます.
JavaScriptにはコンストラクション関数があります.
newを先頭にコンストラクション関数を呼び出すとinstance objectが返されます.
コンストラクション関数を使用してオブジェクトを作成するときに約束された規則(構文)です.
コンストラクション関数はパラメータを受信できます...
constdate=new Date();入力してdate変数を宣言します.
typeof date; 入力すると、objectが返されます.
このように生成されたdateオブジェクトは、前回の授業で学んだようにobjectです.propertyと同じフォーマットを使用できます.
padStart
現在の文字列の先頭に別の文字列を入力し、指定した長さを満たす新しい文字列を返します.入力は、ターゲット文字列の先頭(左側)から適用されます.
//padStart는 앞에 붙고 padEnd는 뒤에 붙음.
// 첫번째 인자는 만족해야할 자릿수, 두번째 인자는 자릿수를 채우지 못하면 사용되어지는 인자
"1".padStart(2,'0');
const clock = document.querySelector('#clock');
function getClock() {
const date = new Date();
const housrs = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
clock.innerText = `${housrs}:${minutes}:${seconds}`;
}
getClock();
setInterval(getClock, 1000);
math
const quotes = [
{
quote: 'Anyone who has ever made anything of importance was disciplined.',
author: 'Andrew Hendrixson',
},
{
quote:
'Don’t spend time beating on a wall, hoping to transform it into a door.',
author: 'Coco Chanel',
},
{
quote: 'Creativity is intelligence having fun.',
author: 'Albert Einstein',
},
{
quote:
'Optimism is the one quality more associated with success and happiness than any other.',
author: 'Brian Tracy',
},
{
quote:
'Always keep your eyes open. Keep watching. Because whatever you see can inspire you.',
author: 'Grace Coddington',
},
{
quote:
'What you get by achieving your goals is not as important as what you become by achieving your goals.',
author: 'Henry David Thoreau',
},
{
quote: 'If the plan doesn’t work, change the plan, but never the goal.',
author: 'Author Unknown',
},
{
quote: 'I destroy my enemies when I make them my friends.',
author: 'Abraham Lincoln',
},
{
quote: 'Don’t live the same year 75 times and call it a life.',
author: 'Robin Sharma',
},
{
quote: 'You cannot save people, you can just love them.',
author: 'Anaïs Nin',
},
];
const quote = document.querySelector('#quote span:first-child');
const author = document.querySelector('#quote span:last-child');
const todaysQuote = quotes[Math.floor(Math.random() * quotes.length)];
quote.innerText = todaysQuote.quote;
author.innerText = todaysQuote.author;
Math.flower:小数点Math.Ceil:小数点を上へ移動
Math.round:小数点を四捨五入する.
createElement
const images = ['0.jpeg', '1.jpeg', '2.jpeg'];
const chosenImage = images[Math.floor(Math.random() * images.length)];
const bgImage = document.createElement('img');
bgImage.src = `img/${chosenImage}`;
document.body.appendChild(bgImage);
to do list
const toDoForm = document.getElementById('todo-form');
const toDoInput = document.querySelector('#todo-form input');
const toDoList = document.getElementById('todo-list');
const TODOS_KEY = 'todos';
let toDos = [];
function saveToDos() {
// JSON.stringify: object나 array나 어떤 것이든 string으로 바꿔줌
// JSON.parse: string을 원래 상태로 바꿈
// localstorage에서는 string만 저장할 수 있기 때문에
// stringify로 Array 자체를 문자열로 만들고
// 나중에 localstorage에서 가지고 온 다음 parse로 문자열을 Array로 만들어서 불러들임.
// db는 누구나 볼수 있는 것이고 LocalStorage는 오직 당신의 브라우저를 위해서.
localStorage.setItem(TODOS_KEY, JSON.stringify(toDos));
}
function deleteToDo(event) {
const li = event.target.parentElement;
li.remove();
// filter는 기본 array를 변경하지 않고 새로운 array를 반환.
toDos = toDos.filter((toDo) => toDo.id !== parseInt(li.id));
saveToDos();
}
function paintToDo(newTodo) {
const li = document.createElement('li');
li.id = newTodo.id;
const span = document.createElement('span');
const button = document.createElement('button');
span.innerText = newTodo.text;
button.innerText = '❌';
button.addEventListener('click', deleteToDo);
li.appendChild(span);
li.appendChild(button);
toDoList.appendChild(li);
}
function handleToDoSubmit(event) {
event.preventDefault();
const newTodo = toDoInput.value;
toDoInput.value = '';
// newTodoObj를 만든이유는 newtoDo에서는 localStorage에서는 어떤 것을 지워야 할 지 모름.
// deletetodo는 html에서 어떤 요소를 지워야 하는지 알지만
// newTodo의 array는 예를 들어 a가 두개 있다면 어느 a인지 알수 없음.
// 그렇기 때문에 newTodoObj를 만들어서 id를추가한 객체를 만들어서 배열에 넣음.
const newTodoObj = {
text: newTodo,
id: Date.now(),
};
toDos.push(newTodoObj);
paintToDo(newTodoObj);
saveToDos();
}
toDoForm.addEventListener('submit', handleToDoSubmit);
const savedToDos = localStorage.getItem(TODOS_KEY);
if (savedToDos !== null) {
const parsedToDos = JSON.parse(savedToDos);
toDos = parsedToDos;
// array.foreach는 받아온 array를 for 반복문 없이 item 하나씩 function에 넣을 수 있음.
parsedToDos.forEach(paintToDo);
}
geolocation
const API_KEY = 'apikey';
function onGeoOk(position) {
const lat = position.coords.latitude;
const lon = position.coords.longitude;
const url = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${API_KEY}&units=metric`;
fetch(url)
.then((response) => response.json())
.then((data) => {
const weather = document.querySelector('#weather span:first-child');
const city = document.querySelector('#weather span:last-child');
city.innerText = data.name;
weather.innerText = `${data.weather[0].main} / ${data.main.temp}`;
});
}
function onGeoError() {
alert("Can't find you. No weather for you.");
}
navigator.geolocation.getCurrentPosition(onGeoOk, onGeoError);
Reference
この問題について(dom操作), 我々は、より多くの情報をここで見つけました https://velog.io/@hrj0903/dom-조작テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol