2009-08-13 5 views
1

전자 상거래 사이트에서 accordion 메뉴를 사용하고 있습니다. 메뉴는 제품 페이지가 나타날 때까지 옵션과 함께 열려 있습니다. 해당 페이지에서 메뉴의 텍스트와 일치 시키려면 탐색 경로를 사용하고 클래스를 적용하여 페이지의 올바른 범주로 메뉴를 엽니 다. 여기 에서 변수 사용 : contains - how

내 코드입니다 :

$(document).ready(function(){ 
var bctext = $('#ProductBreadcrumb ul li:last-child').prev('li').children().text(); 
$('ul#accordion a:contains(bctext)').parent().parent().addClass('special'); 

}); 

변수가 올바른 텍스트를 반환하고, 나는 :contains에 일치하는 문자열 ("토마토 소스")를 넣어 경우 내가 그것을 원하는처럼 작동하며 적용 수업. 그러나 내가 bctext 변수를 사용하면 작동하지 않을 것이다.

a:contains($(bctext))도 시도했지만 작동하지 않았습니다. 그것은 내 구문인가?

감사

+0

그냥 빨리 일 (초승달 신선한 댓글을 달았으로) –

답변

3

시도 :

$('ul#accordion a:contains(' + bctext + ')') 
+0

덕분에, 나는 그 중 하나를 생각하지 못했습니다 :-) –

1

변경 :

$('ul#accordion a:contains(bctext)').parent().parent().addClass('special'); 

에 :

$('ul#accordion a:contains(' + bctext + ')').parent().parent().addClass('special'); 

첫 번째 방법, 당신이 그것을했던 방법은, 자바 스크립트를 말하고있다 contains로 'bctext'문자열을 사용하십시오. 매개 변수. 실제로 원하는 것은 bctext 변수에 포함 된 문자열입니다. 그러므로 따옴표 밖에서 사용해야하고 연결 문자열을 사용하여 선택기 문자열을 만들어야합니다.

+0

덕분에, 그것이 따옴표 안에 wasnt하면 변수라고 알았을 것이기 때문에 나는 혼란 스러웠습니다 ... 여전히 학습했습니다 ... –

0

이 행은 다음과 같습니다

$('ul#accordion a:contains(' + bctext + ')').parent().parent().addClass('special'); 
2

또한 Traversing/contains을 사용할 수

$('ul#accordion a').contains(bctext); 
+2

나는 항상이 방법을 좋아합니다, 나는 항상 가능한 경우 쿼리 내에서 문자열 연결을 피하십시오. 더 안전하고 명확하며 깨끗한 것으로 보인다. – cobbal

+2

'$ .fn.contains()'는 1.2에서 더 이상 사용되지 않으며 1.3의 필터 표현으로 대체되었다. http://docs.jquery.com/Release:jQuery_1.2#Removed_Functionality를 참조하십시오. –

+1

@cobbal - 선택기 문자열 연결과 비교할 때이 방법이 더 안전합니까? –

0

이것은 사용되지 않는 대신 필터를 사용하는 특수 문자 저장 버전입니다 방법을 포함한다. 코드를 선택, 당신의 코드를 더 쉽게 읽을 수 있도록,

1
$('ul#accordion a').filter(':contains(' + bctext + ')' 

$('ul#accordion a').filter(function() { return $(this).text() == bctext; })

이제 deprecated

$('ul#accordion a').contains(bctext); 

선호된다 편집기에서 코드 샘플을 누릅니다.