2010-01-18 2 views
2

나는 내 머리카락을 꺼내고있다 !! 유감스럽게도 ...이 JQuery : 속성 필터가있는 선택기 체인 : 결과가 지속되지 않습니까?

가 작동을 보인다

//get all the foo and bar links that point to a named anchor: 
$("a.foo,a.bar").filter("[href^=#]").click 
(
    function() 
    { 
     doSomething($(this).attr("href").substr(1)); 
     return false; 
    } 
); 

내가의 출력 로그 '. $ (이) .attr ("HREF") SUBSTR (1)'콘솔 I에 모든 관련 링크에 대해 해시가없는 앵커 네임을 참조하십시오. 문제 없다. 하지만 doSomething(), typeof()의 내부에는 문자열이 있습니다.하지만 비어 있습니다! 왜?!! 누군가가 나를 도와 또는 나중에 내 자신의 어리 석음을 알아 내기 위해

function doSomething(str) 
{ 
    //log str : it's empty!! 
} 

은 보통 곧 내가 여기에 질문을 게시 한 후 너무 기괴한입니다. 나는 누군가가이 시간을 도울 수 있기를 바랍니다! :-(

============== 이 해결 =====================

을 * 그것은 내 자신의 어리 석음이었다 ******** ********** 해봐요 내 코드가했던 첫 번째 일은 내부

했다 :

if(str = "") return; 

(이마를 때려). 이걸 다른 방식으로 응시하게 해주셔서 감사합니다.

답변

1

I can't reproduce this.doSomething 코드 자체에 문제가 같은 소리 인덱스입니다 .

+0

omg ... '인수 수정'에 대한 의견에 대해 감사드립니다 ... 나는 너무 바보 같아요. 나는 'if (str = "") return; 문제를 발견 할 수 있습니까? Yah ... – rekindleMyLoveOf

-2

시도당신이 올바른 기능을 가리키고하고 사용하기 전에 인수를 수정하지 않을 것을 확인하기 위해 빠른 코드 검토를 수행 -첫 번째 문자는 0 http://www.w3schools.com/jsref/jsref_substr.asp

+0

나는 그가 의도적으로 #을 생략하려고 생각합니다. – Matchu

+0

글쎄, 나는 아직도 내가 생각하는 것을 받아 들여야한다고 생각한다. – antpaw

+0

... 그게 무슨 뜻입니까? xD 입력은 항상 높이 평가되지만 입력을 평가하고 잘못되었다고 말하는 것은 상호 배타적이지 않습니다. – Matchu

0

참고 : 올바른 대답은 아닙니다. 그러나 다른 Sizzle 사용자들에게 유용 할 경우를 대비하여 여기에 남겨 둘 것입니다.


이것은 Sizzle (jQuery에서 사용하는 선택기 라이브러리)의 버그입니다.

JavaScript에서 link.href에 액세스 할 때 href 속성의 텍스트가 나타나지 않으면 해결 된 절대 URL이 표시됩니다. 당연히 이것은 이 아니라 http://으로 시작됩니다.

link.attr('href')으로 전화하면 jQuery가 특별한 경우를 감지하고 해결 방법을 적용합니다. 선택기를 사용할 때 Sizzle은 그렇지 않습니다.

attrHandle: { 
    href: function(elem){ 
     return elem.getAttribute("href"); 
    } 
}, 

을하지만 그들은 getAttribute 동일한 그냥 자바 스크립트 속성을 얻기 위해 만들로이 해결 방법은, 버전 7까지 IE에서 작동하지 않습니다 : 그것은 시도합니다. [올바른 해결 방법은 대신 getAttributeNode를 사용하거나 IE 냄새 및 독점 getAttribute('href', 2) 확장자를 사용하는 것입니다.]

그래서 선택기 엔진이 href 속성에 대한 http://...를 얻을 수 물론이 ^=# 일치하지 않습니다.당신이 필터 기능으로 자신을 할 경우

그것을 작동합니다 :

$('a.foo, a.bar').filter(function() { 
    return $(this).attr('href').substring(0, 1)==='#'; 
})... 
+0

흠 ... 나는 이것에 대해 듣지 않고 있었다. .. 정보에 감사드립니다! – rekindleMyLoveOf

+0

아 ...이 경우에는 괜찮아 보입니다. Sizzle에는이 버그가 있지만 현재 버전의 jQuery monkey-patch는 문제를 해결하기 위해 문제를 일으킨다. [jQuery 1.3.2의 라인 2196] – bobince