为什么这个 jquery 选择器不起作用?

发布于 2024-10-03 19:45:07 字数 1529 浏览 3 评论 0原文

我有一个来自客户端的任务来更正页面,我发现 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());
    

    [电子邮件受保护]

  • 这不起作用:

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

    未定义

  • 但是:

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

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

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

I have a task from a client to correct a page and I found that jQuery descendant selector does not behave as expected.

Here is an excrept of the 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>

I tried to debug it with FireFox:

  • this worked:

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

    [email protected]

  • this did not worked:

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

    undefined

  • but:

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

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

The problem is that the submit script is generated by a third party app and it wants to use the 3 level descendant selector.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

腹黑女流氓 2024-10-10 19:45:07

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

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

这不是有效的 HTML。放置 div(或除 之外的任何元素)是无效的) 位于单元格外部的表格中间。

这是有效的:

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

或者这是有效的:

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

旁注: 您正在使用表格来设置表单格式。表格用于表格数据。在我的书中,使用表格进行布局是一个坏主意。对 HTML 元素使用正确的语义(表格 = 表格数据、li = 列表、div = 页面划分等)。

The jQuery selector you are trying to use will not work because the HTML is invalid.

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

This is not valid HTML. It is not valid to place a div (or any element other than <thead>, <tfoot>, <tbody>, <tr>) in the middle of a table outside of a cell.

This is valid:

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

Or this is valid:

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

On a side note: You are using the table to format your form. Tables are meant for tabular data. Using tables for layout is a bad idea in my book. Use proper semantics for HTML elements (tables = tabular data, li=lists, div=page divisions, etc...).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文