제이쿼리 직계자손만 잡기..질문

제이쿼리 직계자손만 잡기..질문

QA

제이쿼리 직계자손만 잡기..질문

답변 3

본문

안녕하세요~

lightbox를 이용해서 이미지를 클릭하면 갤러리고 보이는걸 사용하는데요,

지금 현상황은 .content-view 라는 클래스 div에 모든 자식 태그 img 가 자동으로 클릭이 되고, 클릭하면 라이트박스가 뜨는건데..

 


<!--- 이건 그냥 -->
https://cdnjs.cloudflare.com/ajax/libs/lity/2.4.1/lity.min.js
https://cdnjs.cloudflare.com/ajax/libs/lity/2.4.1/lity.css
<!--- 이건 그냥 -->
 
  <script>
   const ENTRY_CONTENT = document.querySelector('.content-view');
   const ALL_IMAGES = ENTRY_CONTENT.getElementsByTagName('img');
   for (let image of ALL_IMAGES) {
      image.addEventListener('click', () => {
     lity(image.src);
      })
   }
   </script>

 

문제는, 하위 모든 img를 잡느라고 레아아웃으로 만든 이미지까지 갤러리 화 되어버려서

제가 지금 원하는건 직계자손만 css로 따지면, .content-view img 이게 아니라, .content-view > img 만되게 하고싶은데.. 제가 찾아봐서 아래 코드로 바꿧는데도 직계자손이 아니라 전체 자손을 잡내요~

 

 


<script>
    const ENTRY_CONTENT = document.querySelector('.content-view');
    const DIRECT_CHILD_IMAGES = ENTRY_CONTENT.querySelectorAll('img');
    for (let image of DIRECT_CHILD_IMAGES) {
     image.addEventListener('click', () => {
     lity(image.src);
      })
   }
   </script>

 

무엇이 문제일까요?ㅠㅠ

 

이 질문에 댓글 쓰기 :

답변 3

1. 모든 child 이미지 노드 이벤트 할당, 클릭시 부모노드 체크


const ENTRY_CONTENT = document.querySelector('.content-view');
const ALL_IMAGES = ENTRY_CONTENT.getElementsByTagName('img');
for (let image of ALL_IMAGES) {
  image.addEventListener('click', (evt) => {
    if (evt.target.parentNode != ENTRY_CONTENT) {
      return;
    }
    lity(image.src);
  });
}

 

2. 다이렉트 child 이미지 노드에 이벤트 할당


// const ENTRY_CONTENT = document.querySelector('.content-view');
// const ALL_IMAGES = ENTRY_CONTENT.getElementsByTagName('img');
const ALL_IMAGES = document.querySelectorAll('.content-view > img');
for (let image of ALL_IMAGES) {
  image.addEventListener('click', (evt) => {
    lity(image.src);
  });
}

const ENTRY_CONTENT = document.querySelector('.content-view');
const DIRECT_CHILD_IMAGES = ENTRY_CONTENT.querySelectorAll('> img');
for (let image of DIRECT_CHILD_IMAGES) {
  image.addEventListener('click', () => {
    lity(image.src);
  })
}

const DIRECT_CHILD_IMAGES = ENTRY_CONTENT.querySelectorAll('> img');

 

답변주신분들 너무너무 감사합니다.

해결이 되었구요~!!!! 일단, js코드 자체가 조금 문제가 있어서,
실 작동은 베르만님게 작동이 되네요~~ㅠㅠㅠㅠㅠ

진짜 10년 감수했습니다~ㅠㅠㅠ

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 179
© SIRSOFT
현재 페이지 제일 처음으로