2011-07-03 2 views
4

외부 사이트의 레이아웃을 조작하려고 할 때 종종 원하는 특정 요소를 대상으로 선택기 체인을 사용해야합니다. 처음으로 jQuery 솔루션이 제공되었으며 결과를 얻는 것은 매우 쉽습니다. jQuery에 의존하지 않고 표준 Javascript에서 실현 가능성을 알고 싶습니다. 다음은 그 예 jQuery를 '체인'입니다 -jQuery없이 Javascript에서 체인 선택기를 연결하는 방법

$('div[id="entry"] > p[class="header"] > span[id="title"] > div[class*="entry"] > p[class="title"] > a[class*="target"]').. etc 

그래서

<div id="entry"> 
    <p class="primary"> 
    <p class="header"> 
     <span class="side"> 
     <span id="title"> 
      <div class="secondary entry"> 
       <p class="return"> 
       <p class="title"> 
        <a class="img"> 
        <a class="mytargetelement"> 

어떻게이 정상적으로 가능하다 HTML 구조가 약이라고? 감사.

+0

나는 당신의 계층 구조가 당신의 예보다 더 복잡 가정,하지만 당신은'$ ('DIV 번호 항목 A [클래스 * = 요소])' – Dexter

+0

예, 사과하는 선택을 단순화 할 수있다. 나는 그것이 가능한 세부적인면에서 볼 필요가있는 것보다 더 복잡한 체인을 보이도록 노력하고 있었다고 생각한다. – gavin19

답변

8

document.querySelectorAll을 입력하십시오.

jQuery가이를 지원하는 브라우저에서 내부적으로 사용하는 것입니다. 구문은 jQuery (Sizzle) 선택기와 동일합니다 (Selectors API 참조).

+0

IE6 및 7에 대한 지원이 필요 없습니다. http://caniuse.com/queryselector – Candide

+0

이것은 내가 찾고있는 것 같습니다. IE6/7 호환성의 부족은 문제가되지 않습니다. 건배! – gavin19

3

이 .. 당신이 childNodes 속성을 통해 아이를 얻을 수있는 각각의 연쇄/중첩 된 요소에 대해

꽤하지 않습니다. 그런 다음 반복을 시작하십시오. :/당신은 적절하게 일치하는 요소를 찾을 때까지 모든 자식과 자식을 반복적으로 순환해야합니다. 당신이 jQuery를 방지하고 그런 다음에야 복잡한 CSS 선택기를 사용하려면

if (element.className.indexOf('myClass') >= 0) { 
    // found it! 
} 
+0

재귀가 DOM 트리를 탐색하는 데 더 적절하다고 말할 수 있습니다. – Candide

+0

@ 롤랜드, 그게 내가 의미했던 바로 그 것이다. 루핑을 언급했을 때 암시 된 것으로 가정했으나 충분히 명확하지는 않습니다. – Kon

+0

@Kon 감사합니다. 나는 element.className 메소드를 알지 못했다. 그것은 기억하는 것이 유용 할 것입니다. – gavin19

2

:이 같은 뭔가를 할 수

클래스 이름의 일부를 확인하려면 :

업데이트 SizzleJS library이 필요할 수도 있습니다. DOM 요소를 찾을 때마다 직접하는 것보다 훨씬 쉽습니다!

+0

그래, 그게 사실 지글이지 내가 jQuery 그 자체가 아니라는 사실을 알아 냈어. 나는 외부 라이브러리를 전혀 사용하지 않고 가능한지 알고 싶었다. 어쨌든 고마워. – gavin19

1
function selectors(){ 
     var temp= [];  //array for storing multiple id selectors. 
     for(var i = 0;i<arguments.length;i++){ 
     if(typeof arguments[i] === 'string') 
     temp.push(document.getElementById(arguments[i])); 
      } 

      return temp; //for chanining 
     }, 

now call the function as many time as you want like 
selectors('p').selectors('anyid') 
+0

이것을 시도하면 always.now가 작동합니다. 원하는대로이 함수를 수정할 수 있습니다. Xpath 선택기를 사용하면 함수를 수정할 수 있습니다. 잠깐 JQUERY를 사용하지 마십시오. – Ankur

관련 문제