【问题标题】:Why this jquery selector does not work?为什么这个 jquery 选择器不起作用?
【发布时间】:2023-03-19 16:48:01
【问题描述】:

我有一个来自客户端的任务来更正页面,我发现 jQuery 后代选择器的行为不符合预期。

这是 HTML 的摘录:

<form action="http://submit.url/subscribe.php" method="post" enctype="multipart/form-data" id="mssysform8217" class="mssysform" >
<div id="mssys-formcontainer">
    <div class="formfields">
        <table style="width: 100%">
        <div class="formfield-item" id="formfield-item-email">
            <tr>
            <td class="style1"><label >E-mail címe</label></td>
            <td>
                <input type="text" name="email" value="">
                <div class="error-container">Please fill in this field!</div>
                <div style="clear: both;"></div>
            </td>
            </tr>
        </div>
        </table>
    </div>
</div>
</form>

我尝试用 FireFox 调试它:

  • 这行得通:

    console.debug($("#mssysform8217 :input[name='email']").val());
    

    test@gmail.com

  • 这不起作用:

    console.debug($("#mssysform8217 #formfield-item-email :input[name='email']").val());
    

    未定义

  • 但是:

    console.debug($("#mssysform8217 #formfield-item-email"));
    

    [div#formfield-item-email.formfield-item]

问题是提交脚本是由第三方应用生成的,它想使用 3 级后代选择器。

【问题讨论】:

  • 为什么要使用多个 ID 选择器(“#id”)?
  • 而且似乎只有一个&lt;input&gt; 从#formfield-item-email 降序,因此不需要[name] 属性选择器。 $('#formfield-item-email input').val() 应该是你所需要的。

标签: jquery html jquery-selectors


【解决方案1】:

您尝试使用的 jQuery 选择器将不起作用,因为 HTML 无效。

<table style="width: 100%">
        <div class="formfield-item" id="formfield-item-email">
            <tr>

这不是有效的 HTML。将 div(或除&lt;thead&gt;&lt;tfoot&gt;&lt;tbody&gt;&lt;tr&gt; 之外的任何元素)放置在单元格外的表格中间是无效的。

这是有效的:

<div>
  <table>
    <tr><td></td></tr>
  </table>
</div>

或者这是有效的:

<table>
  <tr><td><div></div></td></tr>
</table>

附带说明:您正在使用表格来格式化您的表单。表格用于表格数据。在我的书中使用表格进行布局是个坏主意。对 HTML 元素使用适当的语义(tables = 表格数据、li=lists、div=page 分区等...)。

【讨论】:

  • “在表格中间放置一个 div(或任何元素)是无效的...” 例外是 &lt;thead&gt;&lt;tbody&gt;
  • th 不能直接放在表格中。它是一个标题 cell 并且应该总是在一个 tr 内。仍然 +1。
  • 谢谢。该表单也是由 3rd 方应用程序自动生成的,我不确定 div 的位置是否允许。
猜你喜欢
  • 2013-07-31
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多