使用JQuery来获取兄弟姐妹

时间:2011-02-18 05:09:11

标签: jquery

我正在尝试获取下面的标记以从选择中获取值并将其粘贴到输入中。

<td class="ms-formbody" style="width:385px">
    <input name="ctl00$PlaceHolderMain$dlFields$ctl00$txtSource" type="text" id="ctl00_PlaceHolderMain_dlFields_ctl00_txtSource" class="ms-input" />
    <select name="ctl00$PlaceHolderMain$dlFields$ctl00$ddlSourceFields" id="ctl00_PlaceHolderMain_dlFields_ctl00_ddlSourceFields" class="ms-input">
        <option value="Some Field Name 1">Some Field Name 1</option>
        <option value="Some Field Name 2">Some Field Name 2</option>
        <option value="Some Field Name 3">Some Field Name 3</option>
        <option value="Some Field Name 4">Some Field Name 4</option>
    </select>
    <a href="javascript: appendField();">append</a>
</td>

我似乎无法弄清楚如何抓住兄弟姐妹。我尝试了$(this).siblings("input").val()但错误的网页错误'parentNode.firstChild' is null or not an object

尝试$(this).prev().prev().val(),然后回复未定义。抓住这些东西最好的方法是什么?

谢谢, 大卫

6 个答案:

答案 0 :(得分:14)

您的问题源于您的方法。直接调用函数将不会执行您期望的操作,即使用表示&lt; a&gt;的jquery对象。标签。您可以注册一个函数来响应&lt; a&gt;上的click事件,而不是直接调用函数。

首先,为您的链接指定一个ID:

<a href="#" id="appendSelect">append</a>

然后使用将appendField()函数替换为响应click的jQuery选择

$(document).ready(function() {
  $("#appendSelect").click(function() {
    var $thatInput = $(this).siblings("input");
    var $selectValue = $(this).siblings("select").val();
    $thatInput.val($selectValue);
  })
});

使用此方法$(this)将代表您的&lt; a&gt;。

你可以通过使用javascript调试控制台来更深入地了解我正在谈论的内容(chrome默认使用一个,你可以在Firefox上使用Firebug)。再次尝试基于原始函数的方法并添加console.log($(this));语句。您应该看到它打印出DOMWindow对象。现在将相同的日志语句放在click函数中,您将看到jQuery已经为您提供了一个$(this)来表示您的预期。

答案 1 :(得分:4)

尝试:

$(this).parent().children("input:first").val();

答案 2 :(得分:1)

appendfield方法无法访问$(this)。

这是工作代码: http://jsfiddle.net/NBf4d/2/

答案 3 :(得分:0)

使用.children()或.find()

.children只查找父母的直接子女,查找父母以下所有级别的内容。

$('.ms-formbody').find('select').val();

答案 4 :(得分:0)

这仅适用于这些ID,但您可以轻松更改它们:

$('#ctl00_PlaceHolderMain_dlFields_ctl00_txtSource').val($('#ctl00_PlaceHolderMain_dlFields_ctl00_ddlSourceFields').val());

答案 5 :(得分:0)

试试这个......

$(this).parent().find('input:first').val(selectedOptionValue);