2010-03-31 8 views
0

이것은 불행히도 특정 요청 비트입니다.자바 스크립트에서 두 개의 다른 소스의 문자열 비교

나는 사용자가 다양한 게시물에 대한 주석 편집기에 텍스트를 입력 할 수있는 CMS가 있습니다. 편집기는 한 페이지에서 여러 게시물을 편집 할 수 있도록 ajax를 통해로드됩니다. 취소를 클릭하면 본문에 대한 수정 사항이 있는지 확인할 수 있기를 원합니다.

현재 ajax 호출 중에 데이터베이스의 텍스트 값을 얻고 json_encode를 호출 한 다음 콜백 중에 자바 스크립트 변수에 저장하여 나중에 확인합니다. 숨겨진 텍스트 영역의 현재의 값을 클릭 취소하면 다음과 같이 jquery.val()를 사용하여 잡고 이전 아약스 호출에서 저장된 값에 대해 확인 (제출에 대한 데이터를 저장하기 위해 TinyMCE에 의해 사용) :

if(stored_value!=textarea.val()) 
{ 
    return true 
} 

변경 사항이없는 경우에도 현재 항상 true를 반환합니다.

이 문제는 textarea.val()이 html 엔티티를 사용하는 반면 ajax jsoned 버전은 html 엔티티를 사용하지 않는 것으로 보입니다.

불을 지르고에서 아약스의 응답은 다음과 같습니다

<p>some text</p> 
<p>some more text</p> 

이 분명 다르지만, 어떻게 그들을 처리 할 얻을 수 있습니다 :

<p>some text<\/p>\r\n<p>some more text<\/p> 

텍스트 영역의 소스 코드는 다음과 같습니다 같은 때 평가?

자바 스크립트를 사용하여 문자열의 최종 출력을 비교하거나 한 문자열을 다른 문자열로 변환하는 함수가 있습니까?

ajax 페이지에서 html 엔티티를 사용해 보았지만 경고시 html 엔티티가 포함 된 문자열이 반환되었으므로 json_encoding이 문자로 변환했기 때문에이를 가정합니다.

도움을 주시면 감사하겠습니다. jQuery로

ajaxResponse.escapeHTML(); 

나는 좀 더 다른 생각 : 비교하기 전에 prototype

+0

JS 디버그에는 방화 광구를 사용해야합니다. console.log (stored_value, '-', textarea.val()) $ ('textarea # mytextarea')를 사용해야하므로 jquery를 올바르게 사용하고 있는지 궁금합니다. –

+0

죄송합니다. 저는 시간을 절약하기 위해 일을 생략했습니다. $ (textarea # mytextarea ')와 같은 것을 사용합니다. val()은 텍스트 영역의 값을 얻었음을 보여주기 위해 textarea.val()로 단순화했습니다. – andyface

답변

0

난 정말이 jQuery로 가장 좋은 방법이라고 생각하지 않지만, 그것은 작동이보십시오.

var test = "&lt;p&gt;some text&lt;/p&gt;"; 
var dummy = $("<p/>"); 
test = dummy.text(dummy.html(test)); 

alert(test); 
+0

내부적으로 Prototype은 HTML 이스케이프를 수행하는 것과 비슷한 기능을 수행하므로 나쁘지 않다고 생각합니다. – Pointy

+0

이 트릭을 할 것, 감사합니다. – andyface

0

은 그냥 Ajax 응답을 탈출해야합니다.

Escaping strings with Jquery

+0

응답 주셔서 감사합니다, jquery뿐만 아니라 프로토 타입 라이브러리를 사용하려면 예민한 아니에요 jquery 솔루션 .tar() .text() 불행히도 작동하지 않는 것처럼 보입니다. – andyface

0

왜 다른 접근 방식을 시도하지 않습니까?

양식을 제출하기 전에 textarea.defaultValuetextarea.value을 비교해보십시오. 이러한 값이 동일하면 사용자는 아무 것도 변경하지 않았습니다.

+0

일을하는 가장 논리적 인 방법 인 것 같아서 defaultValue 속성 (속성 인 경우)에 대해 읽었지만 이전에는 사용하지 않았기 때문에이 정보를 제공 할 수 있습니다. – andyface

관련 문제