2009-11-26 5 views
3

특정 div 다음에 형제 엘리먼트를 모두 제거하려고합니다. id 태그가 id = id8 인 div 태그라고 말하면됩니다.jquery IE7에서 형제 엘리먼트를 제거하십시오.

<form>  
<div id="id5">something ...<div> 
<div id="id8">something ...<div> 
<div id="id3">something ...<div> 
<div id="id97">something ...<div> 
<div id="id7">something ...<div> 
... 
<div id="idn">some text ...<div> 
</form> 

이렇게하려면 jquery에서 다음 코드를 사용하십시오.

$("#id8 ~ div").remove(); 

Firefox에서는 잘 작동하지만 IE7에서는 작동하지 않습니다.

jquery를 사용하여 요소를 제거하기 시작하려는 요소의 태그 ID를 제공하는 대신이 방법을 사용할 수 있습니까? 덕분에 내가

function removeAfter(el,tag){ 
    element = $('#'+el); 
    var aElements = $(tag,element.parent()); 
    var index = (aElements.index(element)); 

    for(i=(index+1);i<aElements.length;i++) { 
     $('#'+$(aElements.get(i)).attr('id')).remove(); 
    } 
} 

허용 대답에 따라이 솔루션을 끝낼 당신의 도움 에 대한


감사합니다 모두 단지

removeAfter('id8', 'div') 
+0

선택자에 '# id8 ~ div'을 추가하십시오. 도움이 될 수 있습니다. – Boldewyn

+0

죄송합니다. jquery 코드에 #을 넣는 것을 잊어 버렸습니다. – luarwo

답변

2

세 단계 :

  • 은 부모에 대한 우리가 클릭 한 요소의 인덱스 번호를 찾을 수 있습니다. 우리가
  • 각 사업부를 삭제 발견 한 후 시작이 부모에 포함 된 모든 DIV 요소를 통해

  • 루프는이 HTML에서 작동합니다
    $(document).ready(function(){ 
         $('#parent').children().click(function(){ 
          var index = ($('div',$(this).parent()).index(this)); 
          for(i=(index+1);i<$('div',$(this).parent()).length;i++){ 
           $($('div',$(this).parent()).get(i)).hide(); 
          } 
         }); 
    }); 
    

을 발견

<div id="parent"> 
    <div id="c1">c1</div> 
    <div id="c2">c2</div> 
    <div id="c3">c3</div> 
    <div id="c4">c4</div> 
    <div id="c5">c5</div> 
</div> 

문제에 대해 더 이상 문제가 없다면 여기에 댓글을 달아주세요.

P. 귀하의 요청에 정확하게이 솔루션을 적용하면 다음과 같습니다.

function removeAfter(el){ 
    element = $('#'+el); 
    var index = ($('*',element.parent()).index(element)); 
    for(i=(index+1);i<$('*', element .parent()).length;i++){ 
     $($('*', element.parent()).get(i)).hide(); 
    } 
}; 
+0

고마워요 매력처럼 작동했습니다. 당신은 남자입니다 – luarwo

+0

굉장하고 문제 없습니다. 이것을 받아 들인 해결책으로 표시 하시겠습니까? – Gausie

+0

환호하는 사람 :-) – Gausie

2

두 가지를 호출!

1) <div> 태그를 닫으세요!

<form> 
    <div id="id5">something ...</div> 
    <div id="id8">something ...</div> 
    <div id="id3">something ...</div> 
    <div id="id97">something ...</div> 
    <div id="id7">something ...</div> 
    <div id="idn">some text ...</div> 
</form> 

2) ~ 운영자 만 (즉,이 ID3, id97, ID7IDN 일치합니다 일치하는 요소에 따라 형제 자매와 일치하지만 : 그것은 다음과 같아야합니다 not id5). ID5을 포함, 모든 형제와 일치하려면 다음을 수행하십시오 단지 id8 당신을 떠나야한다

$("#id8").siblings("div").remove(); 

합니다. 필자는 Firefox 3.5.5 및 IE7.0something에서이를 테스트했습니다. 희망이 도움이됩니다!

1

편집 :

문제에 대한 수정해야한다 무엇을 추가 할 답변을 아래 편집 :

$("#id8").nextAll().remove(); 

END 편집.

확인. 이것은 흥미로운 버그 인 것 같습니다. 초기 테스트에서는 jquery 버그를 나타내는 것으로 보이지만 어디서나 특정 언급을 찾지 못했습니다.

초기 선택기 태그가 형제와 동일한 유형 인 경우 IE7에서 형제를 반환하지 못하는 것 같습니다.

셀렉터 자체에 대한 jQuery 예제 코드를 사용하여 테스트 한 결과 IE7을 에뮬레이션하는 IE8에서 문제를 복제 할 수있었습니다.

아래 예제에서 jquery 예제 코드를 확인하면 초기 선택자로 사용중인 실제 요소가 span이고 형제 요소가 모두 divs 인 것을 알 수 있습니다. 이 버그는 그것을 문서화하지 않았다. 그것은 교활하고 엿 같은 것이다.

<script> 
    $(document).ready(function(){ 
    $("#prev ~ div").css("border", "3px groove blue"); 
    }); 
</script> 

    <div>div (doesn't match since before #prev)</div> 
    <span id="prev">span#prev</span> 
    <div>div sibling</div> 
    <div>div sibling <div id="small">div niece</div></div> 
    <span>span sibling (not div)</span> 
    <div>div sibling</div> 

변경은 A div-#prev span와 현재 받고있어 당신이 같은 실패를 얻을 것이다. jquery 팀과 함께 버그를 제출할 것입니다. 여기

+0

jQuery 팀이 설명서에 다른 값을 사용하여 버그를 의도적으로 숨길 지 의심 스럽습니다. 버그 리포트 - http://dev.jquery.com/을 제기 하겠지만, jQuery가 아닌 Sizzle과 관련이있는 것처럼 들리지만 말입니다. –

관련 문제