2011-12-28 3 views
11

나는 다음과 같은 마크 업이로 클릭 요소에서 가장 가까운 입력 값을 얻기 :jQuery를

<div class="options"> 
    <div class="quantity"> 
    <label>Qty:</label> 
    <input type="text" name="quantity" value="1"/> 
    </div> 
    <div class="buttons"> 
    <a href="#" class="add">Add Item</a> 
    </div> 
</div> 

내가 jQuery를 사용하여 '추가'클래스에 바인더 제본 클릭 이벤트가 있습니다. 내가 이것을 클릭하면 name = "quantity"의 값을 얻고 싶습니다. 그러나 'add'가 클릭되고 몇 개의 수량 필드가있는 곳이 몇 군데 있습니다.

'가장 가까운'입력 값을 얻으려고합니다. 나는 '가장 가까운'과 'findall'을 사용하려했지만 행운은 없다.

jQuery를 사용하여 어떻게 얻을 수 있습니까? 고맙습니다!

+1

내가 jQuery를 방법'findall'에 대해 들어 본 적이 있습니다. 나는 당신이 [traversal methods] (http://api.jquery.com/category/traversing/)를 살펴보고 그것들을 살펴볼 것을 제안한다. 'closest'는 이미 좋은 시작입니다. 지금까지 작성한 코드를 게시하십시오. –

답변

26
$(".add").on("click", function() { 
    var val = $(this).closest("div.options").find("input[name='quantity']").val(); 
}); 

전략은 여기에 있습니다 :

  • 사용 closest 지정된 셀렉터에 일치하는 가장 가까운 조상 찾기 위해
  • 는 그 다음 input에 찾아 find을 사용하여 (이 경우 클래스 optiondiv) 주어진 nameattribute equals selector을 사용합니다.
  • 마지막으로 val을 사용하여 input의 값을 검색하십시오.
3

closest을 사용하여 적절한 둘러싸인 요소를 찾고 거기에서 작업해야합니다.

$(link).closest(".options").find("input[name=quantity]") 
0
$(this).parent().parent().find("input[name=quantity]").val() 

이 트릭

+1

그건 작동하지 않습니다. '$ (this) .parent()'는'div.buttons'입니다. –

+0

좋은 점은 나쁘다. 정확함을 위해 어떤 식 으로든 내 답변을 가장 가까운 것으로 사용하도록 제안했다. –

0

난 단지 동일한 수준의 요소와 가장 가까운 작품을 생각을해야한다. 그래서 ..

왜 입력 필드에 id를 넣지 않고 $('#input-id')을 선택 하시겠습니까?

또는 클래스 옵션까지 통과하고 거기에 입력을 찾을 : $(this).parents('.options:first').find('input');

+0

'closest'는 선택자와 일치하는 DOM에서 가장 가까운 조상을 찾는다. 부모는 셀렉터와 일치하는 모든 조상을 찾습니다. –

+0

그냥 addad :를 먼저 수리했습니다. 그래서 가장 가까운 작품이 dom을 위쪽으로 검색합니까? 똑똑한 다시 .. :) – Kristian