2016-07-01 6 views
0

와 크기를 변경 나는 브라우저를 특정 width 이하로 크기를 조정할 경우 span 태그로 내 nava 태그를 교체해야합니다.화면에 "<span>"을 "<a>는"jQuery를

<div class="menu-main-menu-container"> 
    <ul> 
     <li><a href="">one</a></li> 
     <li> 
      <a href="">two</a> 
      <ul> 
       <li><a href="">one</a></li> 
       <li><a href="">two</a></li> 
      </ul> 
     </li> 
     <li>three</li> 
    </ul> 
</div> 
여기

내 jQuery를 :

$(window).on('load resize', function() { 
    if ($(window).width() < 478) { 
     $('.menu-main-menu-container ul li:nth-child(2) a').first().replaceWith(function() { 
      return $('<span>' + $(this).html() + '</span>'); 
     }); 
    } 
}); 

는 지금, 모든 부하에서 작동

여기 내 HTML입니다. 브라우저 크기를 조정하면 모두 a 태그가 span 태그로 바뀝니다.

두 번째 li 태그의 첫 번째 a 태그 만 span 태그로 바꿔야합니다.

+0

을; 'resize' 이벤트는 꽤 자주 발생할 수 있습니다. 너 뭐하려고? 미디어 쿼리를 사용해야합니다. – SLaks

+0

미디어 쿼리가 가장 좋은 방법이 될 것입니다. – vignesh

+1

두 개의 요소가있을 수 있습니다. 하나는 범위이고 다른 하나는 앵커입니다. 미디어 쿼리를 통해 하나를 숨기고 하나의 해상도로 다른 하나를 표시하거나 그 반대의 경우도 마찬가지입니다. 이러한 방식으로 dom을 조작하기 위해 jQuery를 사용하는 것은 확실히 가능하지만 아마 피해야한다. –

답변

0

여기의 문제는 resize() 기능입니다. 478px의 평균값에 도달하면 올바른 a이 대체됩니다. 이제 크기를 계속 조정하면 a은 선택자와 일치합니다. 첫 번째 것은 span이므로 일치합니다.

당신이 당신의 HTML 구조는 동적이지 당신이 직접적인 자 선택 > 사용할 수 있습니다 다음과 같이 유지 알고있는 경우 : 나쁜 생각

$('.menu-main-menu-container > ul > li:nth-child(2) > a:first').replaceWith(function() { 
    return $('<span>' + $(this).html() + '</span>'); 
}); 

Example

+0

오, 이런, 완벽하게 이해할 수 있습니다. 감사! – user715564

+0

문제는 아니지만 @DrewKennedy가 자신의 의견에 쓴 내용과 미디어 쿼리를 고려해 볼 수 있습니다. – empiric

2

당신이 잘못 li 표적으로하는, eq()를 사용하고 자식 UL에서 리튬을 선택하는 것 a

에 대한 :first를 사용할 수 있습니다. 나는 그것을 필요로하지 않는다. 그때 당신은 단지 2 li 내부의 a 아닌 아이를 대상으로 직접 아이 >를 사용할 필요가 두

로 변경하는 처음 두 필요 ul

$(window).on('load resize', function() { 
 
    if ($(window).width() < 478) { 
 
    $('.menu-main-menu-container ul > li:eq(1) > a:first').replaceWith(function() { 
 
     return $('<span>' + $(this).html() + '</span>'); 
 
    }); 
 
    } 
 
});
span { 
 
    background: red; 
 
    display: block 
 
} 
 
a { 
 
    background: green; 
 
    display: block 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="menu-main-menu-container"> 
 
    <ul> 
 
    <li><a href="">one</a> 
 
    </li> 
 
    <li> 
 
     <a href="">two</a> 
 
     <ul> 
 
     <li><a href="">one</a> 
 
     </li> 
 
     <li><a href="">two</a> 
 
     </li> 
 
     </ul> 
 
    </li> 
 
    <li>three</li> 
 
    </ul> 
 
</div>

+0

두 번째 ul을 타겟팅하고 싶지 않습니다. 나는 주된 ul에서 두 번째 li를 목표로하고 싶다. 자식 ul이 아니다. – user715564

+0

ok 그런 다음 업데이트 된 답변보기, (eq) – dippas

+0

을 사용하여 아동 ul에서 li을 선택합니다. 나는 그것을 필요로하지 않는다.첫 번째 two user715564

0

다음과 같이 입력하십시오 :

$('.menu-main-menu-container ul li:eq(2) a').replaceWith(function() { 
    return $('<span>' + $(this).html() + '</span>'); 
}); 
관련 문제