【问题标题】:Get value of a Custom Attribute using Javascript使用 Javascript 获取自定义属性的值
【发布时间】:2015-04-18 16:05:42
【问题描述】:
<tr>
    <td colspan="2">
        <div>
            <table id="dataTable">
                <tbody>
                    <tr></tr>
                    <tr id="row_1"></tr>
                    <tr id="row_2"></tr>
                    <tr id="row_3"></tr>
                </tbody>
            </table>
        </div>
    </td>

</tr>

如何使用 jQuery 获取 tr 中 id 的值?我试过 .attr 但失败了。

var row = jQuery('<tr>').attr("id", "row_" + item.autoID);
row.append(jQuery('<td>').append(jQuery('<input>').attr('type', 'checkbox', 'javascript:deleteChecked(' + item.autoID + ');').attr('id', 'check_id_')));


 <input type="button" value="Delete" id="delete_check" disabled onclick="deleteChecked()"/> 

我正在尝试获取 tr 属性 'row_' + id。我有一个复选框。如果您选择复选框,然后点击删除。它应该删除具有特定 id 的行或所有选中的行。

到目前为止,我得到了:

jQuery(document).on('click', '#check_id_', function(id){
jQuery('#delete_check').attr("disabled",!jQuery('#check_id_').is(":checked"));
//var row = jQuery(this).closest('tbody').find('tr').attr('id');
// console.log(row); //doesn't work

});  

function deleteChecked(id){
//grab the checked row ids

}

任何帮助表示赞赏。

【问题讨论】:

  • 抱歉,您到底想做什么?如果您只想要正确 id 的 tr 元素,那么:var row = jQuery("#row_" + item.autoID);
  • 获取属性使用$('&lt;selector&gt;').attr('attributeName')。如果您传递第二个参数,则该属性将为 set。第二行完全是一团糟,我什至无法弄清楚您要完成什么。

标签: javascript jquery attr


【解决方案1】:

要迭代带有选中复选框的行并获取它们的 ID,这样的方法应该可以解决问题:

$('#dataTable')
    .find('input[type="checkbox"]:checked')
    .closest('tr')
    .each(function(ind, ele){
        var id = $(ele).attr('id');
        //do something with the id here
    });

this demo fiddle

HTH, -泰德

【讨论】:

  • var rowID = jQuery('').attr("id");返回未定义。在删除功能中,我需要检查复选框,获取行 ID 并向 servlet 发出 ajax 请求,然后删除发送了 ID 的行。但问题是我正在尝试获取 ID,但这是行不通的。
  • 你真的需要把这一切付诸实践,例如在 JSFiddle 中,因为它有几个错误和误导性的 cmets。
【解决方案2】:

如果我正确理解您的要求,我会建议以稍微不同的方式解决此问题。

  • 您的简单不能在您的 HTML 中有重复的 ID。 ID 查找使用快速查找字典,每个 id 值只能存储 一个 元素,因此只能找到第一个元素。
  • 在 jQuery 中不惜一切代价避免使用 内联事件处理程序(如 onclick="")。它将处理程序注册与处理程序响应分开,没有任何好处,并且不允许 jQuery 提供的一些额外的很酷的事件功能(例如多个处理程序)。
  • 为您的删除操作使用委托事件处理程序。这简化了 HTML,并以更简单的方式允许动态元素/行。
  • 按照您的问题阅读方式,使用复选框而不是按钮进行删除似乎很奇怪。除非您有充分的理由不这样做,否则请改用按钮。
  • 这些行不需要 ID,除非这些 ID 用于其他目的。只需将closest 行删除到单击的删除按钮即可。
  • 使用$('&lt;htmltag&gt;', {'prop': 'value', 'prop2', 'value2'}) 语法创建具有属性的新元素。它更短,更易于阅读。

因此,将所有这些放在一起,您会得到以下内容来创建新行:

var row = $('<tr>', {
    "id": "row_" + item.autoID,
    text: "NEW ROW"
});
row.append($('<td>').append($('<input>', {
    'type': 'button',
    'value': 'X',
    'class': 'deleteme'
})));

$('#dataTable').append(row);

这个简单的代码删除按下deleteme'X'按钮的行:

$('#dataTable').on('click', '.deleteme', function(){
      $(this).closest('tr').remove();
});

这是一个委托事件处理程序。它将侦听click 事件的责任委派给不变的祖先元素。当点击事件冒泡到该元素时,它然后应用 jQuery 选择器(在本例中为类 deleteme),然后针对导致事件的任何匹配元素运行回调函数首先。结果是 deleteme 按钮只需要在事件发生时存在即可。

干净简单。

JSFiddle: http://jsfiddle.net/TrueBlueAussie/k5rh82cz/

现在如果你的实际目标不同,你也需要解释一下你希望它如何出现 :)

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签