如何使用jQuery存储以前选择的li选项?

如何使用jQuery存储以前选择的li选项?,jquery,Jquery,我有多个无序列表与李的形式的电台选择显示格式。当我在ul中选择后续li时,我应该能够存储先前选择的li,并且能够访问ul上方h3中的文本,直到选择下一个li,并且应该以类似的方式继续。我应该使用哪个jQuery选择器?关于如何实现这一点有什么想法吗 用例1 <h3>text1</h3> <ul id="one"> <li>some text</li> <li>some text</li> <li>so

我有多个无序列表与李的形式的电台选择显示格式。当我在ul中选择后续li时,我应该能够存储先前选择的li,并且能够访问ul上方h3中的文本,直到选择下一个li,并且应该以类似的方式继续。我应该使用哪个jQuery选择器?关于如何实现这一点有什么想法吗

用例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>
text1
  • 一些文本
  • 一些文本
  • 一些文本
文本2
  • 一些文本
  • 一些文本
  • -->我首先选择此li。
  • 一些文本
文本3
  • 一些文本
  • 一些文本
  • 一些文本
  • ->接下来,我选择这个li-此时,我应该能够获得先前选择的li的文本“text2”,并将其存储在变量中,比如var 1。
用例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>
text1
  • 一些文本
  • 一些文本
  • 一些文本
文本2
  • 一些文本
  • 一些文本
  • -->我首先选择此li。
  • 一些文本
  • -->接下来,我选择此li-此时,我应该能够获取先前选择的li的文本“text2”,并将其存储在与上述ie var 1相同的变量中。
文本3
  • 一些文本
  • 一些文本
  • 一些文字

这应该会提醒上一次单击的LI的父级H3的内部文本是什么。未测试。

只需在单击事件结束时存储上次单击的项目。然后,您可以通过自己的方式备份dom,以获得相关h3的值

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

您可以使用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');
});
这就是你需要的吗

html:


接受更多问题的答案是个好主意。这样做会鼓励其他人在这个问题和其他问题上帮助你。感谢大家的热烈响应,我将尝试每个答案,并让你知道,到目前为止,我在发布这个问题之前已经尝试了prev和closest,但当我尝试满足用例1时,还没有运气,用例2不起作用,反之亦然。h3不是li的父母,它是其父母ul的兄弟(其中有多个h3)。我不确定这是否有效。@Richarddwards您可能是对的,jquery的.nestest()可能是一个更好的选择。这段代码太棒了。谢谢zdrsh!以前从未使用过jQuery中的数据函数,但它正是我想要实现的。
var lastLiH3;
$('li').click(function(){
    if(lastLiH3){
        alert(lastLiH3);
    }
    lastLiH3 = $(this).parent('ul').prev('h3').text();
});
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');
});
<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>
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);
        }
    });
});