2010-06-21 4 views
0

는 현재 내가 가지고 만들 수 있습니까?jQuery를 어떻게이 일 (태그 교체)

+1

이 – jAndy

+1

... 같은 정규 표현식으로 HTML을 조작 할 수있는 좋은 생각 같아 그냥 코드를 실행 $를 참조 다시 자체를 지적했다 ("몸") 이거 말고". 는 (는) 태그와 게임에 대해 경고했습니다. 나는/p에 대해 isnt/p라는 태그를 얻습니다./p의 경우 "p"로 나옵니다. 스크립트의 태그가 "s"로 나오고 있습니다. 내가 잘못 했나요? –

답변

3

지금은 꽤 확실합니다. 정규식은 태그를 닫는 데는 도움이되지 않으며, 전체 태그를 잡기 위해 i-z를 찾지 않습니다.

의 정규식보십시오 : 홀수

/<\(/?[a-z]+)[^>]*>/gi

뭔가 반환하려고 할 때 '< 스크립트 >를'어쩌면 이러한 경우에, 그래서 return match

앤디 E의 머리의 스크립트를 일치시킬 때 비록 코드 발생 if 문 구조의 변경 제안 또한 도움이된다고 생각합니다. 주된 것은

else 
     return match; 
01입니다.

또는 심지어 p 및 스크립트 태그를 구체적으로 찾는 대신 기본값으로 사용하더라도 if 문이 충족되지 않으면 일치하는 태그의 일치 값을 반환합니다.

코드 내가 테스트를 위해 쓴 :

<!DOCTYPE HTML> 
<html> 
<body> 
<div id="manipulate"> 
<p>Hello</p> 
<script type="text/ecmascript"> 
// test 
</script> 
</div> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/ecmascript"></script> 
<script type="text/ecmascript"> 
$(document).ready(function(){ 
alert("start"); 
$("#manipulate").html($("#manipulate").html().replace(/<\/?([a-z]+)[^>]*>/gi, function(match, tag) { 
      alert(tag); 
      alert(match); 
     if (tag === 'p') 
      return '<p>'; 
     else if (tag === '/p') 
      return '</p>'; 
     else if (tag === 'script') 
      return match; 
     else if (tag === '/script') 
      return match; 
     else 
      return match; 
     })); 
}); 
</script> 
</body> 
</html> 
+0

일하는 그루비 , 대단히 축하합니다. –

+0

+1, [i-z] 비트를 전혀 보지 못했습니다. 제 삼자 연산자에주의를 기울였습니다. :-) –

+0

@Andy : 합당한 답을 조합하여 모든 사람이 점수를 얻는 것은 불가능합니다. –

7

이와 같은 3 진 연산자와 함께 여러 개의 return 문을 사용할 수 없습니다. 첫 번째 것은 평가되고 나머지는 무시됩니다. 적절한 if 문 또는 switch 문을 사용

 if (tag === 'p') 
      return '<p>'; 
     else if (tag === '/p') 
      return '</p>'; 
     else if (tag === 'script') 
      return 'script'; 
     else if (tag === '/script') 
      return '/script'; 
     else 
      return match; 

switch 예 : 또한 맵으로 객체를 사용할 수

switch (tag) { 
    case 'p': return '<p>'; 
    case '/p': return '</p>'; 
    //... 
    case default: return match; 
} 

,

var map { 'p': '<p>', '/p' : '</p>' /*, ... */ }; 
return map[tag] || match; 

또는 중첩 된 삼항 연산자

return tag === 'p' ? '<p>' 
     : tag === '/p' ? '</p>' 
     : tag === 'script' ? '<script>' 
     : tag === '/script' ? '</script>' 
     : match; 

그러나 이러한 정보는 읽기 쉽지 않고 관리하기가 더 어려울 수 있습니다.

+0

또는 여러 if/else if/else 구문에 대해 switch 문을 사용하는 것이 좋습니다. 이는 개인적인 취향의 문제 일뿐입니다. –

+0

@Ken, 예, 다른 옵션이고 예제를 추가했습니다. –

+0

'[ 'p', 'script']'배열을 사용하여 많은 중복을 줄이고'x '또는'/ x'와 일치하는 경우에만'<>'에 변수를 래핑 할 수 있습니까? 그냥'p'와 같이 보이고'script'는 거기서 많이 쓰여집니다 .. – Jeriko