Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么代表不在“中”工作;p";标签?_Javascript_Jquery - Fatal编程技术网

Javascript 为什么代表不在“中”工作;p";标签?

Javascript 为什么代表不在“中”工作;p";标签?,javascript,jquery,Javascript,Jquery,当委托带有p标记时,它不起作用 HTML: 将p#test更改为span#test或body,它可以工作 HTML: 请告诉我一些关于它的事情。非常感谢 浏览器正在更正无效的HTML,并将div移到p之外。它们成为兄弟,因此事件委派不起作用。只需检查元素并亲自查看: 第一种情况: <body> <p id="test"></p> <div>box 1 <div>box in box1</div>

当委托带有
p
标记时,它不起作用

HTML:


p#test
更改为
span#test
body
,它可以工作

HTML:


请告诉我一些关于它的事情。非常感谢

浏览器正在更正无效的HTML,并将
div
移到
p
之外。它们成为兄弟,因此事件委派不起作用。只需检查元素并亲自查看:

第一种情况:

<body>
  <p id="test"></p>
    <div>box 1
        <div>box in box1</div>
    </div>
    <p></p>
</body>

方框1 盒子1中的盒子

第二种情况:

<body>
  <span id="test">
    <div>box 1
        <div>box in box1</div>
    </div>
  </span>
</body>

方框1
盒子1中的盒子

浏览器正在更正无效的HTML,并将
div
移到
p
之外。它们成为兄弟,因此事件委派不起作用。只需检查元素并亲自查看:

第一种情况:

<body>
  <p id="test"></p>
    <div>box 1
        <div>box in box1</div>
    </div>
    <p></p>
</body>

方框1 盒子1中的盒子

第二种情况:

<body>
  <span id="test">
    <div>box 1
        <div>box in box1</div>
    </div>
  </span>
</body>

方框1
盒子1中的盒子
这就是浏览器(HTML解析器)的工作方式,因为
是一个,而
是一个,在大多数情况下,语法元素不能包含任何流元素,这被称为嵌套错误的标记,HTML解析器将通过某些特定步骤神奇地解决这些问题:

  • 当读取
    时,它会生成一个
    元素
  • 在读取
    时,由于
    不能驻留在
    元素中,HTML解析器关闭最后一个
    元素,然后打开一个
    元素
  • 读取
    时,关闭
    元素
  • 当读取

    时,由于前面的
    元素已关闭,解析器将其重新格式化为缺少开始标记的
    元素,因此解析器会自动在此处插入一个
    开始标记,以创建一个完整的
    元素
  • 因此,最终的DOM构造是:

    <p id="test"></p> <!-- auto closed -->
    <div>
      box1
      <div>
        box in box1
      </div>
    </div>
    <p></p> <!-- auto generated -->
    

    框1 盒子1中的盒子

    很明显,
    处于同一级别,没有形成包含关系,因此委托在此失败。

    这就是浏览器(HTML解析器)的工作方式,因为
    是一个,而
    是一个,在大多数情况下,短语元素不能包含任何流元素,这被称为错误嵌套标记,HTML解析器将通过某些特定步骤神奇地解决这些问题:

  • 当读取
    时,它会生成一个
    元素
  • 在读取
    时,由于
    不能驻留在
    元素中,HTML解析器关闭最后一个
    元素,然后打开一个
    元素
  • 读取
    时,关闭
    元素
  • 当读取

    时,由于前面的
    元素已关闭,解析器将其重新格式化为缺少开始标记的
    元素,因此解析器会自动在此处插入一个
    开始标记,以创建一个完整的
    元素
  • 因此,最终的DOM构造是:

    <p id="test"></p> <!-- auto closed -->
    <div>
      box1
      <div>
        box in box1
      </div>
    </div>
    <p></p> <!-- auto generated -->
    

    框1 盒子1中的盒子


    很明显,
    处于同一级别,没有形成包含关系,因此委托在此失败。

    标记
    p
    只能包含
    内联元素
    , 虽然
    标记(作为一个可以很好地处理内联块元素的交叉浏览器标识的标记)可以很好地接受
    div
    标记(虽然可能不正确)

    它既不会在严格的4.01 doctype中验证,也不会在HTML5中验证


    适当的方法是将其包装在块级元素中:
    div

    标记
    p
    只能包含
    内联元素
    , 虽然
    标记(作为一个可以很好地处理内联块元素的交叉浏览器标识的标记)可以很好地接受
    div
    标记(虽然可能不正确)

    它既不会在严格的4.01 doctype中验证,也不会在HTML5中验证


    适当的方法是将其包装在块级元素中:一个
    div

    在段落中包含一个
    div
    是很不常见的(阅读:不正确)而
    元素接受许多标准HTML标记
    div
    是块级元素。因此,它不能放在内联
    p
    中,在段落中嵌套div是无效的HTML。请将问题的所有相关部分也包括在问题中。@Olly:
    .delegate()
    不受欢迎
    .live()
    是…@Olly:是的,被取代的不是不推荐的。。。好吧,我很挑剔;)我同意使用
    .on()
    更有意义!在段落中有一个
    div
    是很不常见的(读作:不正确)而
    元素接受许多标准HTML标记
    div
    是块级元素。因此,它不能放在内联
    p
    中,在段落中嵌套div是无效的HTML。请将问题的所有相关部分也包括在问题中。@Olly:
    .delegate()
    不受欢迎
    .live()
    是…@Olly:是的,被取代的不是不推荐的。。。好吧,我很挑剔;)我同意使用
    .on()
    更有意义!
    <p id="test"></p> <!-- auto closed -->
    <div>
      box1
      <div>
        box in box1
      </div>
    </div>
    <p></p> <!-- auto generated -->