2014-09-05 1 views
0

이 코드는 여기에서 대부분 완벽하게 작동합니다. this.content은 JSON에서 가져온 HTML 문자열입니다. 이 문자열하지만 어떤 이유 jQuery에서 HTML 문자열 반환 오류

$(this.content).find('img, a[href$=".jpg"], a[href$=".jpeg"], a[href$=".JPEG"], a[href$=".png"], a[href$=".pdf"], a[href$=".PDF"]').each(function() { 

}); 

:

Packaged in lots of 10 sets 
<img class="alignnone size-full" src="http://www.integra-adhesives.com/wp-content/uploads/2011/03/Sink_Fastener.jpg" alt="" width="300" /> 

는 jQuery를이 적합을 야기하고있다. 그것은 던지고있다 : Uncaught Error: Syntax error, unrecognized expression:

나는 jQuery v2.1.1을 사용하고있다.

아무도 도와 줄 수 있습니까?

+0

이 오류가 발생했습니다. 올바르게 호출 할 수 있다면 이스케이프 처리되지 않은 슬래시와 관련이 있습니다. 들여다 볼 것입니다. – Jester

+1

http://stackoverflow.com/questions/14347611/jquery-client-side-template-syntax-error-unrecognized-expression – lesssugar

+0

@lesssugar, 2.1을 실행 중입니다.1, 문제가 이미 해결되었지만 어쨌든 해결책을 찾았습니다. 내 대답을 보라. – marcusds

답변

2

사전에 this.content = $.parseHTML(this.content);을 추가하여이 문제를 해결했습니다.

Barmar는 jQuery가 문자열을 선택자로 사용하려고하기 때문에이 문제를 지적합니다.

+0

그것은 좋은 해결책이기도합니다. – Barmar

2

$(something)은 두 가지 방식으로 작동 할 수 있습니다. something이 HTML 문자열이면 DOM 요소로 구문 분석합니다. 선택기 인 경우 현재 선택기와 일치하는 요소를 현재 DOM에서 검색합니다. something이 HTML 태그로 시작하면 HTML 문자열이고 그렇지 않으면 선택기로 간주됩니다. 문자열은 Packaged으로 시작합니다.이 태그는 HTML 태그가 아니므로 문자열이 선택기로 처리되며 유효한 선택자가 아닙니다.

당신은 사용해야 내용이 항상 HTML로 처리됩니다

$('<div>' + this.content).find(...); 

있도록.

find()은 자손만을 검색하기 때문에 문자열이 <으로 시작하는 경우에도이 작업을 수행해야합니다. 당신의 문자열은 같은 있다면 :

<img src="someURL"> 

당신은 한 :

$(this.content).find("img"); 

는 이미지가 최상위 요소이기 때문에, 그것을 찾을 것입니다.

+0

Thanks @ Barmar, 당신이 대답을 게시하기 바로 전에 이것을 발견했습니다. 그러나 나는 그것을 해결하는 더 좋은 방법을 발견했다. – marcusds

1

문제는 jQuery가 HTML이 선택기 표현식 또는 HTML인지 여부를 알 수 없다는 것입니다. JQuery와 문서에서

(강조 광산) : http://api.jquery.com/jQuery/#creating-new-elements이 문자열이 $()에 매개 변수로 전달되는 경우, JQuery와는 HTML처럼 보이는 있는지 확인하기 위해 문자열을 검사

가 (즉, 가 시작 <tag ... >). 그렇지 않은 경우, 문자열은 위에서 설명한대로 선택기 표현식으로 해석됩니다.

HTML을 HTML로 인식하려면 텍스트 노드로 시작하지 않아야합니다. 안전을 위해 <span></span> 태그에 모든 HTML을 래핑 할 수 있습니다.

+0

고마워, 나는 이것을 스스로 발견했으며 $ .parseHTML을 사용하여 문제를 해결했다. – marcusds