jQuery:appendTo最接近的语法

时间:2014-04-07 19:00:46

标签: jquery syntax closest appendto

我确定这是一个简单的问题。我在这样的表中有几行:

   <tr>
    <td>
      <select class="UsersSelect">
        <option value="user-whatever">User Whatever</option>
      </select>
    </td>
    <td>
      <a class="EditButton"><span class="ui-icon ui-icon-pencil"></span></a>
    </td>
   </tr>

这是jQuery:

$('.EditButton').click(function() {
   $('<option>test</option>').appendTo($(this).closest('select.UsersSelect'));
...
});

这根本没有结果。我认为我的错误在于使用$(this)不正确,但无法弄清楚我是如何搞砸它的。

希望我的目标足够明显。只是为了澄清,我试图追加到最接近的选择,它一次不会超过一个,而且总是直接在上面。

非常感谢您的时间!

4 个答案:

答案 0 :(得分:3)

由于select不是兄弟姐妹或父母,你必须对选择器做更多的逻辑:

var container = $(this).closest("td").prev("td").find("select.UsersSelect");
$('<option>test</option>').appendTo(container);

答案 1 :(得分:3)

select.UsersSelect不是.EditButton的父级。这就是为什么没有发生的原因。

请改用:

$('.EditButton').click(function() {
   $(this)
     .closest("tr")
     .find("select.UsersSelect")
     .append('<option>test</option>');
   // ...
   return false;
});

JSFIDDLE

  

答案 2 :(得分:1)

尝试:

$('.EditButton').click(function() {
   $('<option>test</option>').appendTo($(this).closest('td').prev().find('select.UsersSelect'));
});

<强> jsFiddle example

.closest()向上移动DOM,在你的例子中,它将转到父td,然后是父tr,即表,完全没有选择。

答案 3 :(得分:1)

改变这个:

$('<option>test</option>').appendTo($(this).closest('select.UsersSelect'));

到此:

$('<option>test</option>').appendTo($(this).closest('tr').find('select.UsersSelect'));

您需要使用tr遍历.closest(),然后您可以使用.find()方法获取目标。