>

선택기에 특정 클래스, ID 또는 둘 다가 있는지 확인하고 있습니다. ID, 클래스 또는 둘 다에 일치하는 경우 eitherClassIdOrBoth()  선택기를 elements 로 푸시합니다.  정렬. 완벽하게 작동하지만 확산 연산자 .

여기서 부울을 반환합니다 :

var idAndClassMatch = function(matchId, matchClass, matchBoth) {
return (
(matchBoth && matchId && matchClass) || (!matchBoth && (matchId || matchClass))); }

이것은 스프레드 연산자를 사용하려는 함수입니다 :

var elements = []
function eitherClassIdOrBoth(
   selectId, selectClass, array, matchBoth, elements
) 
{
   for (let i = 0; i < array.length; i++) {
      var classSection = array[i].className.split(" ");
      var matchId = selectId !== undefined && array[i].id === selectId;
      var matchClass = classSection !== undefined && 
          classSection.indexOf(selectClass) !== -1;
      if (idAndClassMatch(matchId, matchClass, matchBoth)) {
          elements.push(array[i]); 
      }
   }
}

이 값을 if 에서 전달하고 있습니다  진술 :

if (arr.length === 2) {
    computedFunction.eitherClassIdOrBoth(
        selectId, selectClass, tags, false, Allelements
    );
}

도움이 매우 도움이 될 것입니다!

  • 답변 # 1

    이 논리를 작성하는 더 좋은 방법이 있지만, 요점은 아마도 ES6에 국한된 것이 아닙니다.

    나에게 눈에 띄는 가장 큰 것은이 전체 함수의 주요 쿼리가 CSS 선택기를 기반으로 요소를 검사하는 Element # matches 호출로 대체 될 수 있다는 것입니다. 구형 브라우저에서는 일관되게 사용할 수 없지만 사용 가능한지 확인하기 위해 폴리 필을로드하는 것은 쉽지 않습니다. 그럼 당신의 전체

    computedFunction.eitherClassIdOrBoth(
        selectId, selectClass, tags, false, Allelements
    );
    
    

    전화는 그냥

    Allelements.push(
      ...tags.filter(tag => tag.matches(`.${selectClass}, [id="${selectId}"]`)
    );
    
    

    예 : .filter 사용  그리고 .matches  주어진 tags 를 가진 항목만으로 새로운 배열을 만들기 위해  배열 한 다음 ES6 스프레드를 사용하여 모든 항목을 쉽게 Allelements 로 푸시하십시오.  배열.

    selectClass 가있는 몇 가지 사례가있는 것 같습니다  또는 selectId   undefined 일 수 있었다 을 통해 해당 검색어를 작성할 수도 있습니다 (예 :

    const selector = [
      selectClass ? `.${selectClass}` : "",
      selectId ? `[id="${selectId}"]` : "",
    ].filter(Boolean).join(",");
    Allelements.push(
      ...tags.filter(tag => selector ? tag.matches(selector) : false
    );
    
    

    matchBoth 의 경우   true 입니다 , 당신은 "" 와 함께 셀렉터에 합류합니다   "," 대신 . 결국 당신은

    function eitherClassIdOrBoth(
       selectId, selectClass, array, matchBoth, elements
    ) {
        const selector = [
          selectClass ? `.${selectClass}` : "",
          selectId ? `[id="${selectId}"]` : "",
        ].filter(Boolean).join(matchBoth ? "" : ",");
        if (selector) {
          elements.push(...array.filter(tag => tag.matches(selector));
        }
    }
    
    

    일반적인 유틸리티를 원한다면

  • 이전 MySQL 한 달 안에 특정 직원 생산의 모든 단계를 계산하는 방법
  • 다음 bash - <(git log --oneline)의 읽기 루프는 터미널의"git log --oneline"과 다른 출력을 갖습니다