2011-03-10 3 views
0

테이블이 있습니다. 항목이 삭제되면 단일 표 셀에 패딩을 적용해야합니다. 나는 그 세포에 계급 표시를했다. 어떻게 선택합니까?Javascript find child class

droppedRow은 방금 삭제 된 테이블 행을 포함합니다.

만약 내가 ID라면 droppedRow.getElementById('..'); 클래스 이름과 비슷한 것이 있습니까? 바닐라 자바 ​​스크립트를 사용하여> = IE7

감사

답변

1

를 지원해야합니다, 당신은 태그 이름으로 요소의 모두를로드 한 후 각 요소의 클래스 명을 평가하여 그것을 찾아야 아마 것이다. 다른 한편으로는, 당신이 jQuery를 사용하고, 경우

예를 들어

(스타일 그냥 예입니다) ...

var tableCells = document.getElementsByTagName('td'); 
for(var i = 0, l = tableCells.length; i < l; i++) { 
    if(tableCells[i].className === 'droppedRow') { 
     tableCells[i].style.padding = '1em'; 
    } 
} 

, 당신은 사용할 수 있어야합니다 :

$('.droppedRow').css('padding', '1em'); 

그러나이 두 예에서 모두 의 droppedRow 클래스 이름을 가진 셀은 단일 요소가 아닌이 스타일링을 수신합니다.

라이브러리를 사용하지 않는 경우이 기능의 바닐라 변형을 고수해야합니다. 라이브러리는 너무 많은 오버 헤드로 인해 한 줄로 압축되지 않습니다.

Maxym의 answer은 구형 브라우저에 대한 getElementsByClassName의 견고한 구현을 제공합니다.

+0

감사 톰, 나는 나에게 jQuery를 사용할 수 있지만이 라이브러리는 바닐라 JS를 사용하고 난 새를 만들 싶지 않아 1 행을위한 의존성. 코드가 완벽하게 작동했습니다 : D – John

-1

더 강력하고 본격적인 자바 스크립트 프레임 워크가 필요하다면 프로젝트에 JQuery의 장점이 있거나 Dojo가 필요한 것 같습니다. JQuery를 사용하면 선택기 엔진을 사용하여 설명한 시나리오를 쉽게 실행할 수 있습니다. 당신이 라이브러리를 사용하는 경우

+0

왜 내가 여기에 다운 투표를했는지 확실하지 않습니다. 나는 가장 단순한 일을하려고 할 때 바퀴를 재발 명하려는 사람들이 꽤 아프다. 자바 스크립트 프레임 워크는 이유 때문에 만들어졌습니다. –

+0

jQuery가 요소를 선택하기 전에 가능했기 때문에 휠을 다시 만들었다 고 말할 수 있습니다. jQuery는 모든 것에 대한 해답이 아닙니다. 특정 상황에서 하나의 요소를 선택하기 위해 라이브러리를 포함해야하는 이유는 무엇입니까? –

+0

요소에서 선택해야하는 경우 트랙 아래로 다른 선택을해야 할 것입니다. JQuery가 모든 것에 대한 해답이라고 말하는 것은 아닙니다. 이러한 작업을 빠르고 강력하게 수행 한 다음 이처럼 평범한 작업을 수동으로 수행하는 데 너무 많은 시간을 소비하는 것이 훨씬 쉽습니다. –

-1

, 왜 사용하지 :

JQuery와 - $("#droppedRow > .paddedCell")

를 ID로 떨어 행별로 셀

프로토 타입 그게 전부 - $$("#droppedRow > .paddedCell")

+0

왜 도서관이 싫어하니? –

+1

OP는 JS 라이브러리 사용에 관해 아무 말도하지 않았기 때문에. –

+1

그럼에도 그는 자기가 한 사람을 원하지 않는다고 말하지 않았다. 그가 그렇게 말하면 나는 downvote를 이해할 것이다. –

0

Clientside getElementsByClassName cross-browser implementation :

var getElementsByClassName = function(className, root, tagName) { 
     root = root || document.body; 
     if (Swell.Core.isString(root)) { 
      root = this.get(root); 
     } 


    // for native implementations 
    if (document.getElementsByClassName) { 
     return root.getElementsByClassName(className); 
    } 

    // at least try with querySelector (IE8 standards mode) 
    // about 5x quicker than below 
    if (root.querySelectorAll) { 
     tagName = tagName || ''; 
     return root.querySelectorAll(tagName + '.' + className); 
    } 

    // and for others... IE7-, IE8 (quirks mode), Firefox 2-, Safari 3.1-, Opera 9- 
    var tagName = tagName || '*', _tags = root.getElementsByTagName(tagName), _nodeList = []; 
    for (var i = 0, _tag; _tag = _tags[i++];) { 
     if (hasClass(_tag, className)) { 
      _nodeList.push(_tag); 
     } 
    } 
    return _nodeList; 
} 

일부 브라우저는 기본적으로 (FireFox와 같은) 그것을 지원합니다. 다른 브라우저에서는 사용할 구현을 제공해야합니다. 그 기능은 당신을 도울 수 있습니다; 그것의 성능은 네이티브 함수에 의존하기에 충분해야하고 네이티브 구현이없는 경우에만 모든 태그를 취하여 반복하고 필요에 따라 선택해야합니다.

UPDATE : 스크립트는 구현할 수있는 hasClass 함수에 의존합니다 이 방법은 :

function hasClass(_tag,_clsName) { 
    return _tag.className.match(new RegExp('(\\s|^)'+ _clsName +'(\\s|$)')); 
} 
1

getElementsByClassNamebut it is not supported in IE이 존재한다.여기에 당신이 할 수있는 것입니다 :

var element; 

// for modern browsers 
if(document.querySelector) { 
    element = droppedRow.querySelector('.yourClass'); 
} 
else if(document.getElementsByClassName) { // for all others 
    element = droppedRow.getElementsByClassName('yourClass')[0]; 
} 
else { // for IE7 and below 
    var tds = droppedRow.getElementsByTagName('td'); 
    for(var i = tds.length; i--;) { 
     if((" " + tds[i].className + " ").indexOf(" yourClass ") > -1) { 
      element = tds[i]; 
      break; 
     } 
    } 
} 

참조 : querySelector, getElementsByClassName, getElementsByTagName

+0

안녕하세요, IE9에서 지원됩니다. [link] (http://www.quirksmode.org/dom/w3c_core.html)를 참조하십시오. – scheffield