困惑的jQuery .prev()

时间:2014-01-10 12:11:35

标签: jquery

当我使用$('#btn')单击按钮时,我成功更改了按钮值.prep()。text('new string');但我不知道为什么应该使用.prev()

根据http://api.jquery.com/prev/,.prev()正在搜索DOM中每个元素的前导,但不搜索现有元素。

单击任何按钮时,是否应更改按钮1而不是按钮2?

HTML

<button value="Button 1" id="btn1">Button 1</button>
<button value="Button 2" id="btn2">Button 2</button>
<button value="Button 3" id="btn3">Button 3</button>

的Javascript

$(function (e) {

    $(':button').click(function (e) {
        e.preventDefault();
        $('#btn2').prev().text('Click');
    });
})

1 个答案:

答案 0 :(得分:3)

那是因为你正在使用改变元素结构的jQuery mobile:

<div class="ui-btn ui-shadow ui-btn-corner-all ui-btn-up-c" data-corners="true" data-shadow="true" data-iconshadow="true" data-wrapperels="span" data-theme="c" data-disabled="false" aria-disabled="false">
    <span class="ui-btn-inner">Button 2</span>
    <button id="btn2" class="ui-btn-hidden" value="Button 2" data-disabled="false">Button 2</button>
</div>

正如您所看到的,此前的元素是span元素。以下代码段通过更新.ui.btn的textContent来更改以前的span 可见 textContent:

$('#btn2').closest('.ui-btn') // get the closest `.ui-btn` parent 
          .prev()  // get the previous element
          .find('span.ui-btn-inner') // find the span
          .text('Click');