【问题标题】:can't use .val on element found by .find不能在 .find 找到的元素上使用 .val
【发布时间】:2016-12-27 13:47:10
【问题描述】:

我有一个动态生成的表,(当前)有一个设置规则,即第一列必须是某种唯一标识符。该表是基于 json 文件生成的,但我认为这在这里并不重要。

每个表格行都有一个添加了class="delete" 的锚标记。当我单击该锚标记时,我执行以下代码:

e.preventDefault();
var idCell = $(this).closest('tr').find('td')[0];

如果我console.log(idCell),我会在我的控制台中得到<td>01</td>。 如果我console.log(typeof idCell) 我得到object。 如果我 console.log 来自 DOM 的随机元素的类型,我也会得到 object

我的问题是:我无法从idCell 获取.val(),而我可以从直接从DOM 过滤的任何元素访问.val()

我主要关心的是为什么会(不)发生这种情况,如果有解决此类问题的方法,如果您能与我分享,我将不胜感激。

编辑 1: 这里有一个示例表。

<table>
    <tr>
        <th>
            id
        </th>
        <th>
            delete
        </th>
    </tr>
    <tr>
        <td>
            01
        </td>
        <th>
            <a href="#" class="delete">delete</a>
        </th>
    </tr>
</table>

当我点击删除链接时,请尝试获取表格的 ID,最好使用 jQuery。

【问题讨论】:

  • .val 用于输入,也许您需要.text
  • 因为 [0] 是 DOM
  • 并使用 [0] 将其转换为原始 dom 元素。
  • .val() 是 jQuery 方法,而不是 DOM 方法。它仅适用于 jQuery 对象。 [0] 选择一个 DOM 对象,所以它在那里不起作用。使用.eq(0) 而不是[0]
  • 只有输入字段有值,表格单元格没有。它适用于.text()jsfiddle.net/o6mt2f16

标签: javascript jquery dom


【解决方案1】:

作为JJJDaniel A. White提到,解决办法是:

1) 使用.eq(0) 代替[0] 将选择器保留为jQuery 元素。

2) 使用.text() 而不是.val(),因为只有输入字段有值,而表格单元格没有。

【讨论】:

    【解决方案2】:

    这是脚本(对我来说很好)

    $(".delete").bind("click",function(e) {
        e.preventDefault();
        var idCell = $(this).closest('tr').find('td');
        idCell.html("");
    });
    

    【讨论】:

    • e.preventDefault();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2019-01-03
    相关资源
    最近更新 更多