【问题标题】:Why isn't jquery's .html() working on <td></td>?为什么 jquery 的 .html() 不能在 <td></td> 上工作?
【发布时间】:2011-10-14 12:56:10
【问题描述】:

我有这个代码:

<script> 
function del(a){
        alert(a);
        alert($("#"+a).html());
        alert($("#td").html());
            alert($("#div").html());
}
</script> 
<td id="td">wtf</td> 
<div id="div">wtf</div> 
<table> 
   <tr>
       <td id="bbbbb">test</td><td><span onclick="del('bbbb');">click</span></td>
   </tr>
</table>

警报是

bbbbb
test
null
wtf

td 内容被标记为空(忽略)?

为什么?

proof http://sandbox.phpcode.eu/g/743de.php

更新:

here 我的警报也给我null

【问题讨论】:

  • 请注意,对无效 HTML 的 JavaScript DOM 操作是不可预测的。你永远猜不到浏览器会构建什么 DOM 树。

标签: javascript jquery html dom html-table


【解决方案1】:

首先,您不能在表格之外有 &lt;td&gt; 元素,但似乎在您的更新中,您已经解决了这个问题。

在您的最新更新中,由于 jQuery 选择器的工作方式,您发布的小提琴返回 null。您要查找的 ID 是“5c192.php”,因此当您执行 $('#'+a) 时,它会变为 $('#5c192.php'),这被解释为 'ID=5c192' 和 'class=php',因为 . 是一个类选择器。

$('#'+a) 更改为$('[id="'+a+'"]')

【讨论】:

    【解决方案2】:

    您正在调用 del("bbbb"),但 &lt;td&gt; 的 id 是“bbbbb”,有五个 b。不确定这是否是您的问题。此外,您不能在桌子外有&lt;td&gt;,这可能就是$("#td") 搞砸的原因。试试:;

    <script> 
    function del(a){
            alert(a);
            alert($("#"+a).html());
            alert($("#td").html());
                alert($("#div").html());
    }
    </script> 
    
    <div id="div">wtf</div> 
    <table> 
       <tr>
           <td id="bbbbb">test</td><td><span onclick="del('bbbbb');">click</span></td>
    <td id="td">wtf</td> 
       </tr>
    </table>
    

    编辑

    td 在表格外无效有效。如果您通过网络检查器查看生成的输出,您会看到 td 已被删除,并且它的内容以纯文本形式放置在页面上。 td 在那里是无效的,因此尝试通过 JS 来获取它会很困难,并且 不是 一个好主意。

    【讨论】:

    • 呸!你打败了我。另一个问题是#td 是一个位于桌子外面的&lt;td&gt;,因此浏览器通常会剥离标签。
    • 好眼睛!!但是,第二个 (不在 中)仍然无法正常工作
    • @Reid:我看到 td outside table (wtf) 通常没有问题
    • 你也不需要 TBODY 标签吗?
    • @bozdoz 没有。这是可选的;浏览器会自动插入。
    【解决方案3】:

    那个浮动的&lt;td&gt;元素是无效的,基本上被解析成

     wtf 
    

    没有无效的 td 元素。将其更改为跨度、div 等。它将起作用。除了缺少的b

    更新:

    在您的 jsFiddle 中,您的 ID 无效5c192.php。具体来说,不是以字母开头。来自What are valid values for the id attribute in HTML?

    ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,并且可以是 后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、 下划线(“_”)、冒号(“:”)和句点(“.”)。

    不过,我也会删除句号。

    【讨论】:

    • 你ID中.php中的句点无效
    【解决方案4】:
    alert($("#"+a).html());
    

    为空,因为您传递的 id 无效。

    alert($("#td").html());
    

    为空,因为元素 td 在其上下文中不是有效的 html。


    编辑:您的代码在那里运行良好。这次只是你的身份证无效。不能以数字开头。

    【讨论】:

    【解决方案5】:

    应将 TD 包含在 TABLE 标记中。
    比如这个例子:jsfiddle

    【讨论】:

      【解决方案6】:

      因为 bbbbb (5x) 和 bbbb(4x) 是不同的。

      【讨论】:

      • id 为 td 的元素也不正确,但 $("td").eq(0).html() 可以工作,它会获取表格中页面上的第一个 td ,第一个被丢弃为不正确的html(td不在表格中)。
      【解决方案7】:

      第一个 td(id="td" 的那个)在表之外(td 总是应该在表内),你调用函数 del 给出一个字符串 4 b, bbbb 而你的 td有 5 天,ddddd。

      【讨论】:

      • 所以如果 td outside 在外面
        会被忽略?
      • 是的。很可能就是这个原因。通常,您不应该在表之外使用 tds,无论您是否在它们上使用 jquery。
      • 还有一个提示,避免使用元素名称作为 id。例如。 td, div 是元素名称,避免使用它们作为 id。
      猜你喜欢
      • 1970-01-01
      • 2011-07-10
      • 2011-12-20
      • 2019-07-04
      • 2021-11-20
      • 2012-06-20
      • 2013-04-13
      • 2011-01-29
      • 1970-01-01
      相关资源
      最近更新 更多