jquery连续识别元素

时间:2010-08-29 21:46:44

标签: jquery

我是JQ的新手。我有一个表,每行都有一个唯一的ID,如<tr id="123">

我在该行的某个字段中有一个编辑按钮,我想将该行转换为表格。

如何获取该行中每个字段的所有值?

这是现在的表格。

<tr id="e2c420d928d4bf8ce0ff2ec19b371514">
   <td><div id="item_name">asdf (asdf)</div></td>

   <td><div id="edit">Edit</div></td>

   <td><div id="item_description">asdf</div></td>

   <td><div id="item_price">1234</div></td>

   <td><div id="item_qty">1</div></td>

   <td><div id="item_total">1234</div></td>
</tr>

<tr id="b2x4123928d4bf8ce0ff2ec19b372138">
   <td><div id="item_name">asdf (asdf)</div></td>

   <td><div id="edit">Edit</div></td>

   <td><div id="item_description">asdf</div></td>

   <td><div id="item_price">1234</div></td>

   <td><div id="item_qty">1</div></td>

   <td><div id="item_total">1234</div></td>
</tr>

2 个答案:

答案 0 :(得分:1)

从你的问题确切地说你正在尝试做什么有点不清楚,但这会将所有值加载到一个对象中:

var values = {};
$("#e2c420d928d4bf8ce0ff2ec19b371514 div").each(function() {
    var div = $(this);
    values[div.attr("id")] = div.html();
}

你将能够像这样引用这些值:

var itemName = values["item_name"];

根据问题的变化,您需要做的是:

$("div#edit").click(function() {
    $("div", this).each(function() {
        var div = $(this);
        if(div.attr("id") !== "edit") {
            var input = $('<input type="text" />').attr("name", div.attr("id")).val(div.html());
            div.replaceWith(input);
        }        
    }
}

您可能希望将div的ID更改为类(并将div.attr("id")替换为div.attr("class"),将$("div#edit")替换为$("div.edit"),因为您应该只有{每页一个id的实例。你也可能想要检查你处理的每个div的id(使用switch块)并在每种情况下创建一个不同类型的输入(根据你的需要)。 / p>

答案 1 :(得分:1)

我认为您应该使用类和data-id属性,但这取决于您。

<table id="myTable">
    <tr data-id="e2c420d928d4bf8ce0ff2ec19b371514">

        <td><div class="item_name">asdf (asdf)</div></td>

        <td><div class="edit">Edit</div></td>

        <td><div class="item_description">asdf</div></td>

        <td><div class="item_price">1234</div></td>

        <td><div class="item_qty">1</div></td>

        <td><div class="item_total">1234</div></td>
    </tr>

    <tr data-id="b2x4123928d4bf8ce0ff2ec19b372138">
        <td><div class="item_name">asdf (asdf)</div></td>

        <td><div class="edit">Edit</div></td>

        <td><div class="item_description">asdf</div></td>

        <td><div class="item_price">1234</div></td>

        <td><div class="item_qty">1</div></td>

        <td><div class="item_total">1234</div></td>
    </tr>
</table>

您需要的是(假设您使用的是jquery 1.4.2 +)

$('#myTable').delegate('.edit', 'click', function () {
    var trElem = $(this).closest('tr');
    name = trElem.find('div.item_name').text();
    // etc...
});

.delegate.closest上阅读更多内容。它们使用较少但是方法很棒。