jquery.replaceWith()在IE7中与.clone()玩得不好

jquery.replaceWith()在IE7中与.clone()玩得不好,jquery,debugging,internet-explorer-7,replace,clone,Jquery,Debugging,Internet Explorer 7,Replace,Clone,我使用jQuery创建了一个显示在对话框中的链接TOC。我编写的函数用于查找页面中的所有h4,并 为他们提供链接到的ids 添加一些编号显示信息 克隆它们 将克隆变成lis 将内部文本包装到定位标记中 查找定位点向定位点添加单击功能以关闭对话框 将titles和hrefs添加到锚定中,以便链接指向原始h4s 返回到lis 将lis追加到对话框div 然而,在IE7中,克隆的h4s没有被上交lis。在FireFox中工作。在IE7中,一切都像在FireFox中一样发生,只是.replaceWi

我使用jQuery创建了一个显示在对话框中的链接TOC。我编写的函数用于查找页面中的所有
h4
,并

  • 为他们提供链接到的
    id
    s
  • 添加一些编号显示信息
  • 克隆它们
  • 将克隆变成
    li
    s
  • 将内部文本包装到定位标记中
  • 查找定位点向定位点添加单击功能以关闭对话框
  • title
    s和
    href
    s添加到锚定中,以便链接指向原始
    h4
    s
  • 返回到
    li
    s
  • li
    s追加到对话框
    div
然而,在IE7中,克隆的
h4
s没有被上交
li
s。在FireFox中工作。在IE7中,一切都像在FireFox中一样发生,只是
.replaceWith()
似乎被忽略了。。。为什么?

看起来像这样:

$('#content h4').each(function(index) {
   index = index + 1;
    $(this)
   .attr('id', 'tutorial_' + index)
   .before(function() {
            return '<div class="how_to">HOW TO<div><span>' + index + '</span></div></div>';
        })
  .clone()
  .replaceWith("<li>" + $(this).text() + "</li>")
  .wrapInner("<a></a>")
  .find('a')
    .click(function(){
        $("#dialog").dialog("close");
    })
    .attr({
        'title': 'jump to ' + $(this).text(),
        'href': '#tutorial_' + index
    })
   .end()
  .appendTo('#dialog ol')
 });
$('#content h4')。每个(函数(索引){
指数=指数+1;
$(本)
.attr('id','tutorial_uu'+索引)
.在(函数()之前{
返回'HOW TO'+索引+'';
})
.clone()
.replace为(“
  • ”+$(this).text()+“
  • ”)
    .wrapInner(“

    我真的不明白为什么人们如此喜欢克隆……:)

    我会做类似的事情

    $('#content h4').each(function(index) {
       index = index + 1;
        $(this)
       .attr('id', 'tutorial_' + index)
       .before(function() {
                return '<div class="how_to">HOW TO<div><span>' + index + '</span></div></div>';
            })
      .clone()
      .html("<li>" + $(this).text() + "</li>")
      .wrapInner("<a></a>")
      .find('a')
        .click(function(){
            $("#dialog").dialog("close");
        })
        .attr({
            'title': 'jump to ' + $(this).text(),
            'href': '#tutorial_' + index
        })
       .end()
      .appendTo('#dialog ol')
     });
    
    $('#content h4')。每个(函数(索引){
    指数=指数+1;
    $(本)
    .attr('id','tutorial_uu'+索引)
    .在(函数()之前{
    返回'HOW TO'+索引+'';
    })
    .clone()
    .html(“
  • ”+$(this.text()+”
  • ”) .wrapInner(“”) .find('a')) 。单击(函数(){ $(“对话框”)。对话框(“关闭”); }) 艾特先生({ 'title':'跳转到'+$(this).text(), “href”:“教程”+索引 }) (完) .appendTo(“#对话框ol”) });
    但那只是我:)

    编辑:在阅读了关于replaceWith()的“很多”之后-IE7和IE6似乎永远都存在未解决的错误。因此,我放弃了我的函数,使用你的函数,并将
    replaceWith
    替换为
    html
    -在这种情况下,它以你想要的方式工作,即替换项的html并返回它本身


    至于replaceWith,您可能遇到了web与IE7的一个bug;)

    我真的不明白为什么人们如此喜欢克隆…:)

    我会做类似的事情

    $('#content h4').each(function(index) {
       index = index + 1;
        $(this)
       .attr('id', 'tutorial_' + index)
       .before(function() {
                return '<div class="how_to">HOW TO<div><span>' + index + '</span></div></div>';
            })
      .clone()
      .html("<li>" + $(this).text() + "</li>")
      .wrapInner("<a></a>")
      .find('a')
        .click(function(){
            $("#dialog").dialog("close");
        })
        .attr({
            'title': 'jump to ' + $(this).text(),
            'href': '#tutorial_' + index
        })
       .end()
      .appendTo('#dialog ol')
     });
    
    $('#content h4')。每个(函数(索引){
    指数=指数+1;
    $(本)
    .attr('id','tutorial_uu'+索引)
    .在(函数()之前{
    返回'HOW TO'+索引+'';
    })
    .clone()
    .html(“
  • ”+$(this.text()+”
  • ”) .wrapInner(“”) .find('a')) 。单击(函数(){ $(“对话框”)。对话框(“关闭”); }) 艾特先生({ 'title':'跳转到'+$(this).text(), “href”:“教程”+索引 }) (完) .appendTo(“#对话框ol”) });
    但那只是我:)

    编辑:在阅读了关于replaceWith()的“很多”之后-IE7和IE6似乎永远都存在未解决的错误。因此,我放弃了我的函数,使用你的函数,并将
    replaceWith
    替换为
    html
    -在这种情况下,它以你想要的方式工作,即替换项的html并返回它本身


    至于replaceWith,您可能遇到了web与IE7的一个bug;)

    该页面脚本中有一些输入错误

    第43行:

    $('#dialog ol').
    
    你必须删除那个点

    第61行:


    我不认为};应该在那里!

    那页脚本有一些打字错误

    第43行:

    $('#dialog ol').
    
    你必须删除那个点

    第61行:


    我不认为};应该在那里!

    不起作用。看
    .add(“
  • ”+$(this.text()+“
  • ”)
    -
    $(this)
    指的是
    $(“#dialog ol”)
    在你写的东西中。那里没有文本。但是我知道你想做什么。我可以得到文本并把它放在变量中,然后把它放在
  • 之间。但这不是我的问题,我想知道为什么我写的东西不起作用。它是不是一个bug,等等……好吧,我只是试图向你展示不同的方法,当你有了它的时候我还编辑了代码。我还看到你把代码放在上面了-这也有错误-在$(内容ol)之后,有两个句号(点)-应该是一个-已经在这里编辑。谢谢你的新策略。我想看看为什么我所做的不起作用…嗯。假设这是一个错误。谢谢你建议的替代路线。不起作用。请看
    。添加(“
  • ”+$(this)。text()+“
  • ”)
    -
    $(此)
    $('dialog ol'))
    在你写的东西中。那里没有文本。但是我知道你想做什么。我可以得到文本并把它放在变量中,然后把它放在
  • 之间。但这不是我的问题,我想知道为什么我写的东西不起作用。它是不是一个bug,等等……好吧,我只是试图向你展示不同的方法,当你有了它的时候我还编辑了代码。我还看到你把代码放在上面了-这也有错误-在$(内容ol)之后,有两个句号(点)-应该是一个-已经在这里编辑。感谢新的策略。我想看看为什么我所做的不起作用…嗯。假设这是一个错误。感谢你建议了另一条路线。哦,那是我在尝试Adam Kiss的解决方案。他更正了。我恢复到了我的原始代码,除了replaceWith()在IE7中被忽略了,就像我第一次说的。哦,那是我在尝试Adam Kiss的解决方案。他纠正了。我恢复到了我的原始代码,这是有效的,除了在IE7中被忽略的replaceWith(),就像我第一次说的。