2014-03-26 2 views
0

substr 함수가있는 문자열의 일부를 처음부터 두 번째 중단 점까지 가져 오는 데 문제가 있습니다. 그런 다음 클래스를 사용하여 요소를 적용하여 긴 텍스트 표시 또는 긴 텍스트 숨기기를 클릭 한 후 나머지를 숨기고 텍스트 아래의 아이콘으로 적용하십시오. 기본값은 표시되는 짧은 텍스트입니다. 내 문제는 처음부터 필요로하는 줄 바꿈이 아니라 두 번째 부분 만 표시한다는 것입니다. 아이콘을 클릭하면 다음 부분 만 표시됩니다. 전체 텍스트가 아닌 한 줄로 표시됩니다. 너희들이 내게 조언을 해줄 수 있니? 나는 그것이 text.indexOf ('element') 내부의 문제라고 생각한다. 고맙습니다. PS : exampleJquery - substr을 사용하여 문자열의 일부를 얻는 방법?

JQuery와 : 내 나쁜 영어

JsFiddle 죄송

$(".content_wrap").each(function() { 
    text = $(this).html(); 
    if (text.length > 350) { 
     alert(text.indexOf('<br>')); 
     $('.cond-arr').show(); 
     $(this).html(text.substr(0, text.indexOf('<br>')) + '<span class="elipsis" style="display:none;">' + text.substr(text.indexOf('<br>'), text.indexOf('<br>') + 1) + '</span><a style="display:block; width 100%; margin: 0 auto; text-align: center" class="elipsis" href="#"><img class="cond-arr" src="http://findicons.com/files/icons/2222/gloss_basic/36/arrow_down.png" alt="arrow" /></a>'); 
     $(".content_wrap > a.elipsis").click(function(e) { 
      e.preventDefault(); //prevent from being added to the url 
      if ($('span.elipsis').is(':hidden')) { 
       $('img.cond-arr').attr('src', 'http://png-5.findicons.com/files/icons/2222/gloss_basic/36/arrow_up.png'); 
      } else { 
       $('img.cond-arr').attr('src', 'http://findicons.com/files/icons/2222/gloss_basic/36/arrow_down.png'); 
      } 
      $(this).prev('span.elipsis').fadeToggle(500); 
     }); 
    } else { 
     $('.cond-arr').hide(); 
    } 
}); 

HTML :

<div> 

<h2>Title</h2> 
<span class="content_wrap">Something very long Something very long Something very long 
    <br />Something very long 
    Something very long Something very long Something very long Something 
    <b>very long Something very</b> long Something very long Something very long 
    Something very long Something very long Something very longSomething very long 
    Something very long Something very long Something very long Something very long 
    Something very long Something very long Something very long <b>Something very long</b> 
    Something very long Something very long Something very long Something very long 
    Something very long Something very long Something very long Something very long 
    Something very long Something very long <strong>Something very long</strong> 
    Something very long Something very long Something very long Something very long 
    Something very long Something very long Something very long Something very long 
    Something very long Something very long Something very long Something very long 
    <br /> 
    <!-- Text after this break line should be hidden default and show only when i click icon below --> 
    Something very long Something very long Something very long Something very long 
    Something very long Something very long Something very long Something very long 
    Something very long Something very long Something very long Something very long 
    Something very long Something very long Something very long Something very long 
    Something very long Something very long 
</span> 

</div> 

답변

1

은 오히려 같이 IndexOf보다, 내가 분할이의 더 좋은 친구라고 생각합니다 사례 :

var parts = text.split('<br>'); 
var shown = parts.slice(0, 2).join('<br>'); 
var hidden = parts.slice(2).join('<br>'); 
(210)

나는 shownhidden를 사용하도록 바이올린을 수정하고 당신이 원하는 것을 할 듯 :

http://jsfiddle.net/QpuG8/

+0

바이올린 자신의 바이올린을 수정해야합니다. 다른 사람들이 나의 모범을 어떻게 활용할 수 있는지. – user3342042

+0

당신 말이 맞아요. 미안합니다. 나는 당신의 원본을 내 자신의 것으로 포크했습니다. – DavidM

+0

고맙습니다. 정상적으로 작동합니다. – user3342042

0

두 번째 <br>의 인덱스 얻기 위해 정규 표현식을 사용할 수 있습니다

var re = new RegExp(/<br \/>/g); 
re.exec(text); 
re.exec(text); //Yes, we match twice to get the second match 

var shorterText = text.substr(0,re.lastIndex); 
+0

댓글에 바이올린을 올리실 수 있습니까? 감사합니다. – user3342042

+0

@ user3342042 : 예, 여기 있습니다. http://jsfiddle.net/Nn3C3/ 답변도 업데이트 할 예정입니다. – fiskeben

관련 문제