2011-10-21 4 views
0

라디오 선택 표시 형식의 형식으로 된 여러 개의 순서가없는 목록이 있습니다. ul 내에서 후속 li을 선택하면 이전에 선택한 li을 저장하고 다음 li가 선택 될 때까지 ul 위의 h3에있는 텍스트에 액세스 할 수 있어야하며 비슷한 방식으로 진행되어야합니다. jQuery의 어떤 선택자를 사용해야합니까? 이것을 달성하는 방법에 대한 아이디어가 있습니까? 마지막의 부모 H3의 내부 텍스트 LI를 클릭 어떤jQuery를 사용하여 이전에 선택한 li 옵션을 저장하는 방법은 무엇입니까?

은 Usecase 1

<h3>text1</h3> 
<ul id="one"> 
<li>some text</li> 
<li>some text</li> 
<li>some text</li> 
</ul> 
<h3>text2</h3> 
<ul id="two"> 
<li>some text</li> 
<li>some text</li> --> I select this li first. 
<li>some text</li> 
</ul> 
<h3>text3</h3> 
<ul id="third"> 
<li>some text</li> 
<li>some text</li> 
<li>some text</li> -> Next I select this li - at this point I should be able to get the text "text2" of the previously selected li and store it in a variable say var 1. 
</ul> 

은 Usecase 2

<h3>text1</h3> 
<ul id="one"> 
<li>some text</li> 
<li>some text</li> 
<li>some text</li> 
</ul> 
<h3>text2</h3> 
<ul id="two"> 
<li>some text</li> 
<li>some text</li> --> I select this li first. 
<li>some text</li> --> Next I select this li - at this point I should be able to get the text "text2" of the previously selected li and store it in the same variable as above ie var 1. 
</ul> 
<h3>text3</h3> 
<ul id="third"> 
<li>some text</li> 
<li>some text</li> 
<li>some text</li> 
</ul> 
+1

질문의 많은 답변을 받아 보는 것도 좋은 방법입니다. 그렇게하면 다른 사람들이이 질문이나 다른 질문을하는 데 도움이 될 것입니다. – Blazemonger

+0

압도적 인 응답을 주신 여러분, 저는 각 답변을 시도해보고 알려 드리겠습니다. 지금까지 저는이 질문을 게시하기 전에 가장 가까운 곳에서 시도해 보았습니다. 그러나 운이 좋아지는 것은 아직까지는 유스 케이스 1을 만족 시키려고 할 때와 같았습니다. 2는 작동하지 않으며 반대의 경우도 마찬가지입니다. – neelmeg

답변

1

당신은 jQuery를

var dataHolder = $('ul').first(); 

dataHolder.data('oldEle', { 
    text: 'NAN', 
    index: -1, 
    parentClass: "NANClass" 
}); 

$('li').click(function() { 

    alert('prev: ' + dataHolder.data('oldEle').text + ' index of prev: ' + dataHolder.data('oldEle').index + ' in parent: ' + dataHolder.data('oldEle').parentClass); 
    dataHolder.data('oldEle').text = $(this).text(); 
    dataHolder.data('oldEle').index = $(this).index(); 
    dataHolder.data('oldEle').parentClass = $(this).closest('ul').attr('id'); 
}); 

data jquery example

+0

이 코드 조각이 흔들립니다. 감사합니다 zdrsh! 이전에는 jQuery의 데이터 함수를 사용하지 않았지만 정확히 달성하고 싶습니다. – neelmeg

+0

예, 유용합니다 : D tnx – zdrsh

0
var lastClickedText; 

$('li').live('click', function() { 
    if (lastClickedText) { 
     alert(lastClickedText); 
    } 
    lastClickedText = $(this).parents('h3').text(); 
}); 

이 경고를해야했다. 테스트되지 않았습니다.

+0

h3은 li의 부모가 아니며, 그 부모의 ul (그 중 h3이 여러 개인)의 형제입니다. 나는 이것이 잘 될지 확신하지 못한다. –

+0

@RichardEdwards 아마도 정확할 수 있습니다. jquery의 .closest()가 더 나은 선택 일 수 있습니다. – jbabey

1

클릭 이벤트가 끝날 때 마지막으로 클릭 한 항목 만 저장하십시오. 그런 다음 dom을 백업하여 관련 h3 값을 얻을 수 있습니다.

var lastClickedLi = null; 
var var1 = ""; 
$('li').click(function() { 
    if (lastClickedLi != null) { 
     var1 = lastClickedLi.closest('ul').prev('h3').text(); 
    } 
    lastClickedLi = $(this); 
}); 

http://jsfiddle.net/6yypn/

0
var lastLiH3; 
$('li').click(function(){ 
    if(lastLiH3){ 
     alert(lastLiH3); 
    } 
    lastLiH3 = $(this).parent('ul').prev('h3').text(); 
}); 
0

에서 데이터 오브젝트를이 당신이 필요로하는 무엇을 사용할 수 있습니까?

http://jsfiddle.net/RZRcC/7/

HTML :

<h3>text1</h3> 
<ul id="one"> 
    <li><input type="radio" value="test1" name="t1"/></li> 
    <li><input type="radio" value="test1" name="t1"/></li> 
    <li>v</li> 
</ul> 
<h3>text2</h3> 
<ul id="two"> 
    <li><input type="radio" value="test1" name="t2"/></li> 
    <li><input type="radio" value="test1" name="t2"/></li> --> I select this li first. 
    <li><input type="radio" value="test1"/></li> 
</ul> 
<h3>text3</h3> 
<ul id="third"> 
    <li><input type="radio" value="test1" name="t3"/></li> 
    <li><input type="radio" value="test1" name="t3"/></li> 
    <li><input type="radio" value="test1" name="t3"/></li> -> Next I select this li - at this point I should be able to get the text "text2" of the previously selected li and store it in a variable say var 1. 
</ul> 

JQuery와 부분 :

var lastSelect = null; 
var lastSelectHead = null; 
$(document).ready(

function() { 
    $("li > input[type='radio']").click(

    function() { 
     if (lastSelect) { 
      lastSelectHead = $(lastSelect).parents("ul").prev("h3").text(); 
     } 
     lastSelect = this; 
     if (lastSelectHead) { 
      alert(lastSelectHead); 
     } 
    }); 
}); 
관련 문제