2009-08-31 3 views
8

여기 코드는 사람이 무엇을 기대 반환하지 않습니다JQuery (..)입니다. jQuery 1.3.2에서 html() 버그가 있습니까?

jQuery('<div>Look here: [ jQuery0="null" ]</div>').html() 

을 오히려 당신이 얻을 : 문제

Look here: [ ] 

JQuery와 소스 코드 :

html: function(value) { 
     return value === undefined ? 
       (this[0] ? 
         this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : 
         null) : 
       this.empty().append(value); 
}, 

동기 부여가 될 것입니다 무엇 .replace 뒤에? jQuery의 나머지 부분을 다룰 시간이 없지만,이 코드를 사용하면 프로덕션 환경에서 jQuery를 사용해야하는지 궁금합니다.

답변

4

이 코드는 1.3.2에 새로 추가되었으며 1.3.1에는 포함되지 않았습니다. 나에게 jQuery가 "jQuery"로 시작하는 애트리뷰트를 사용하여 엘리먼트에 데이터를 저장하는 것처럼 보입니다. 이것은 html로 요청할 때 노출되지 않는 방식입니다.

분명히 버그는 아닙니다. 작성자가 문자열을 반환하기 전에 해당 HTML을 제거하려고했습니다.

이것은 코드에 영향을 줍니까? 다른 라이브러리와 마찬가지로 배포하기 전에 프로덕션 코드를 철저히 테스트해야합니다.

+1

아직까지는 내 코드에 영향을 미치지 않지만 경고음이 울리는'x.html (y) .html() == y' 불변성이 깨졌습니다. 이것이 언제 소개되었는지에 대한 정보를 주셔서 감사합니다. 당신 말이 맞습니다. 버그는 아니지만 의심스러운 디자인 결정입니다. – t0yv0

11

.replace 뒤에 숨겨진 동기는 무엇입니까?

내부 목적으로 jQuery가 사용하는 속성을 숨기려면.

코드를 사용하면 제작 환경에서 jQuery를 사용해야하는지 궁금합니다.

그래, 나는 똑같은 반응을 보였다. 엄청나게 엉망입니다. regexp로 HTML을 처리하려고 시도하는 것은 최초의 질문 포스터에서 기대할 수있는 순진한 해킹이 아니라 많은 SO 사용자가 예배하는 것처럼 보이는 프레임 워크에서 볼 수있는 동작이 아닙니다.

정규식으로 마크 업을 구문 분석하여 jQuery가 작동하는 유일한 장소는 아닙니다. 선택기 항목 중 일부가 너무 손상되었습니다. 이것들은 모호한 모서리의 경우 일지 모르지만, 나에게 그것은 잘못된 접근을 나타내는 거대한 붉은 깃발입니다.

+4

덧붙여 말하자면,이 문제를 쉽게 해결할 수 있습니다. IE는'innerHTML' 직렬화에서 expando 속성을 포함합니다. 그 값이'String'과'Number'와 같은 간단한 유형 일 때입니다. 배열과 같은 다른 객체는 나타나지 않습니다. 그래서 모든 jQuery는'node [expando] = uuid; '대신'node [expando] = [uuid];'를 설정해야하며,이 말도 안되는 모든 정규 표현식 처리는 사라질 수 있습니다. – bobince

+0

내가 너를 얼마나 사랑하는지 말해 봤어? 당신은 모호한 IE 수정의 신 같은 존재인가. –