jQuery .append()无法在IE,Safari和Chrome中运行

时间:2010-05-17 01:16:05

标签: jquery css internet-explorer google-chrome append

所以我正在使用jQuery的AJAX函数为我读取一些XML,它工作得很好。但是现在我试图在从选项项触发mouseup时操纵4个不同动态生成的div的显示属性。 div的大小和x / y由XML确定并通过解析。

我的问题在于这些div不会生成,也不会出现在IE,Safari和Chrome中。在Firefox和Opera中,它们确实可以工作。我正在使用jQuery的.append()创建div,然后使用.css()函数来操作它们。查看Chrome的开发人员工具,我发现脚本中正在更改的css属性正被样式表中的属性覆盖。任何修复?

此处创建的Div:

    case "dynamic":
     var n = name;
     switch(portion){
      case "stub":
      $('.ticket').append("<div class='stubEditable' id='"+n+"' title='stub'></div>");
      break;
      case "body":
      $('.ticket').append("<div class='bodyEditable' id='"+n+"' title='body'></div>");
      break;
     }
    break;
    case "static":
     var n = name;
     switch(portion){
      case "stub":
      $('.ticket').append("<div class='stubEditable' id='"+n+"' title='stub'></div>");
      break;
      case "body":
      $('.ticket').append("<div class='bodyEditable' id='"+n+"' title='body'></div>");
      break;
     }
    break;

更改显示属性的Mouseup函数:

$('#StubTemplates').find('.ddindent').mouseup(function(){
    var tVal = $(this).val();
    var tTitle = $(this).attr('title');
    if(!stubActive){
     $('.stubEditable').css('display', 'none');
     $('#'+tVal).css('display', 'block');
     stubActive = true;
    }else{
     $('.stubEditable').css('display', 'none');
     $('#'+tVal).css('display', 'block');
     stubActive = false;
    }
   });
   $('#StubTemplates').find('#stubTempNone').mouseup(function(){
    $('.stubEditable').css('display', 'none');
   });
   $('#BodyTemplates').find('.ddindent').mouseup(function(){
    var tVal = $(this).val();
    var tTitle = $(this).attr('title');
    if(!bodyActive){
     $('.bodyEditable').css('display', 'none');
     $('#'+tVal).css('display', 'block');
     bodyActive = true;
    }else{
     $('.bodyEditable').css('display', 'none');
     $('#'+tVal).css('display', 'block');
     bodyActive = false;
    }
   });
   $('#BodyTemplates').find('#bodyTempNone').mouseup(function(){
    $('.bodyEditable').css('display', 'none');
   });

3 个答案:

答案 0 :(得分:4)

由于您可以在开发工具中看到样式已正确添加到元素中,因此问题不在于JQuery,而在于CSS的级联。通常,直接添加到元素中的任何内容都应优先,但也有例外。 CSS specificity会导致一些令人困惑的行为。你有一个重要的地方吗?

此外,由于您隐藏并显示display:block和display:none,请确保您没有可见性:隐藏在将覆盖的CSS中。

此外,您不仅仅使用.show().hide().toggle()的原因?您还可以尝试删除妨碍使用.removeClass().addClass().toggleClass()的其他类。

如果一切都失败了,你可以尝试$('。bodyEditable')。css('display','none!important');。

我尽量避免!重要,因为它会导致如此多的麻烦......但是出于某种原因,这是出于规范。

答案 1 :(得分:1)

所以我设法解决了这个问题。选择菜单中的选项没有调用mouseup,所以我在选择菜单上使用了.change()函数,同时使用:selected选择器来查找所选内容。

非常感谢布拉德利让我走上正轨。

答案 2 :(得分:0)

对我来说这个问题的简单解决方案:添加到你要附加css display:block;的div。可能任何其他类型的display:都可能会有所帮助。