문제

각 DIV의 클래스에 따라 웹 사이트에서 특정 DIV 요소의 가시성을 전환하려고합니다. 기본 JavaScript 스 니펫을 사용하여 전환합니다. 문제는 스크립트가 사용한다는 것입니다 getElementById, 처럼 getElementByClass JavaScript에서는 지원되지 않습니다. 불행히도 DIV 이름은 특정 카테고리 이름을 사용하여 내 XSLT 스타일 시트에 의해 동적으로 생성되기 때문에 DIV의 이름을 지정하지 않고 클래스를 사용해야합니다.

나는 특정 브라우저가 이제 지원한다는 것을 알고 있습니다 getElementByClass, 그러나 인터넷 익스플로러는 그 길을 가고 싶지 않기 때문에 그 길을 가고 싶지 않습니다.

클래스별로 요소를 가져 오기 위해 함수를 사용하여 스크립트를 찾았습니다 (예 :이 페이지의 #8 : http://www.dustindiaz.com/top-ten-javaScript/), 그러나 토글 스크립트와 통합하는 방법을 알 수 없습니다.

HTML 코드는 다음과 같습니다. XML/XSLT로 페이지로드에서 생성되기 때문에 DIV 자체가 누락되었습니다.

주요 질문 : 아래 토글 스크립트를 ID를 얻는 대신 클래스별로 요소를 가져 오려면 어떻게해야합니까?

<html>

<head>

<!--This is the TOGGLE script-->
<script type="text/javascript">
<!--
    function toggle_visibility(id) {
       var e = document.getElementById(id);
       if(e.style.display == 'block')
          e.style.display = 'none';
       else
          e.style.display = 'block';
    }
//-->
</script>

</head>

<!--the XML/XSLT page contents will be loaded here, with DIVs named by Class separating dozens of li's-->

<a href="#" onclick="toggle_visibility('class1');">Click here to toggle visibility of class 1 objects</a>

<a href="#" onclick="toggle_visibility('class2');">Click here to toggle visibility of class 2 objects</a>

</body>
</html>
도움이 되었습니까?

해결책

최신 브라우저는 지원합니다 document.getElementsByClassName. 공급 업체 가이 기능을 제공하는 전체 분석을 볼 수 있습니다. 사용해도 되나요. 이전 브라우저로 지원을 확장하려면 jQuery 또는 Polyfill에서 발견되는 것과 같은 선택기 엔진을 고려할 수 있습니다.

오래된 답변

당신은 체크인하고 싶을 것입니다 jQuery, 다음을 허용합니다.

$(".classname").hide(); // hides everything with class 'classname'

Google은 호스팅 된 jQuery 소스 파일을 제공하므로이를 참조하고 순간적으로 다가올 수 있습니다. 페이지에 다음을 포함시킵니다.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
  $(function(){
    $(".classname").hide();
  });
</script>

다른 팁

그만큼 getElementsByClassName 메소드는 이제 가장 최근 버전의 Firefox, Safari, Chrome, IE 및 Opera에서 기본적으로 지원됩니다. 기본 구현을 사용할 수 있는지 확인할 수 있습니다. 그렇지 않으면 Dustin Diaz 방법을 사용하십시오.

function getElementsByClassName(node,classname) {
  if (node.getElementsByClassName) { // use native implementation if available
    return node.getElementsByClassName(classname);
  } else {
    return (function getElementsByClass(searchClass,node) {
        if ( node == null )
          node = document;
        var classElements = [],
            els = node.getElementsByTagName("*"),
            elsLen = els.length,
            pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"), i, j;

        for (i = 0, j = 0; i < elsLen; i++) {
          if ( pattern.test(els[i].className) ) {
              classElements[j] = els[i];
              j++;
          }
        }
        return classElements;
    })(classname, node);
  }
}

용법:

function toggle_visibility(className) {
   var elements = getElementsByClassName(document, className),
       n = elements.length;
   for (var i = 0; i < n; i++) {
     var e = elements[i];

     if(e.style.display == 'block') {
       e.style.display = 'none';
     } else {
       e.style.display = 'block';
     }
  }
}
document.getElementsByClassName('CLASSNAME')[0].style.display = 'none';

acyally getElementsByClassName을 사용하여 여러 클래스 배열을 반환합니다. 동일한 클래스 이름은 동일한 HTML 페이지 내에서 둘 이상의 인스턴스에서 사용할 수 있기 때문입니다. 우리는 배열 요소 ID를 사용하여 필요한 클래스를 타겟팅합니다. 제 경우에는 주어진 클래스 이름의 첫 번째 인스턴스입니다. 그래서 [0]을 사용했습니다.

추가 CMS의 답변, 이것은 더 일반적인 접근법입니다 toggle_visibility 방금 나 자신을 사용했습니다.

function toggle_visibility(className,display) {
   var elements = getElementsByClassName(document, className),
       n = elements.length;
   for (var i = 0; i < n; i++) {
     var e = elements[i];

     if(display.length > 0) {
       e.style.display = display;
     } else {
       if(e.style.display == 'block') {
         e.style.display = 'none';
       } else {
         e.style.display = 'block';
       }
     }
  }
}

내 해결책 :

먼저 만들어 "" u003Cstyle>" tags with an ID.

<style id="YourID">
    .YourClass {background-color:red}
</style>

그런 다음 다음과 같은 JavaScript에서 함수를 만듭니다.

document.getElementById('YourID').innerHTML = '.YourClass {background-color:blue}'

나를위한 매력처럼 일했습니다.

JavaScript에서 클래스에 액세스하는 데 사용하십시오.

<script type="text/javascript">
var var_name = document.getElementsByClassName("class_name")[0];
</script>

클래스 선언에서 ID를 추가하십시오

.aclass, #hashone, #hashtwo{ ...codes... }
document.getElementById( "hashone" ).style.visibility = "hidden";
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top