jQuery.append()在IE、Safari和Chrome中不起作用

jQuery.append()在IE、Safari和Chrome中不起作用,jquery,css,internet-explorer,google-chrome,append,Jquery,Css,Internet Explorer,Google Chrome,Append,因此,我使用jQuery的AJAX函数为我读取一些XML,它工作得很好。但现在我试图在从选项项触发mouseup时操作4个不同的动态生成div的display属性。div的大小和x/y由XML确定,并通过XML解析 我的问题在于,这些div要么没有生成,要么就是没有出现在IE、Safari和Chrome中。在Firefox和Opera中,它们确实有效。我使用jQuery的.append()来创建div,然后使用.css()函数来操作它们。在Chrome的开发工具中,我看到脚本中更改的css属性被

因此,我使用jQuery的AJAX函数为我读取一些XML,它工作得很好。但现在我试图在从选项项触发mouseup时操作4个不同的动态生成div的display属性。div的大小和x/y由XML确定,并通过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;

因为您可以在dev工具中看到样式被正确地添加到元素中,所以问题不在于JQuery,而在于CSS的级联。通常,像这样直接添加到元素的任何内容都应该获得优先权,但也有例外。可能会导致一些混乱的行为。你有电话吗!有什么重要的地方碍事吗

另外,由于使用display:block和display:none隐藏和显示,请确保CSS中没有将覆盖的visibility:hidden

还有,你为什么不使用and或or?您还可以尝试删除妨碍您的类,并使用或设置其他类

如果所有其他方法都失败,您可以尝试使用$('.bodyEditable').css('display','none!important')


我尽量避免!这很重要,因为它会引起很多麻烦…但是它在规范中是有原因的。

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


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

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

无论如何,您可以将该代码片段精简为导致问题的基本示例?或者至少提供一些关于导致问题的确切ID/类的信息?您可以使用任何格式来清理该代码段,这也会很有用。干杯。好的,我尽我所能把它剪下来。
$('#'+tVal)
ugh。有没有人听说过
document.getElementById(tval)
?jQuery散列附加id getter在Web上非常流行。。。但是它太慢了,太笨拙了。@Delan-我和其他人一样讨厌添加字符串,但问题在于Javascript本身。它急需一个字符串格式化程序。毫无疑问,市场上有很多解决方案,但它需要语言。就jQuery id而言,我希望使用如下语法:
jQuery({id:tVal})
,或者
jQuery({'class':classVar})
。JQ1.4已经提供了一些工具,比如以对象作为参数的元素创建。类似这样的选择器也会很好。@Delan-实际上jQuery在检测ID选择器时在内部使用document.getElementById,所以速度慢且笨拙在这里不是非常准确。一个也没有!重要的。.stubEditable和.bodyEditable都设置为display:none。我在回答一篇关于CSS特性的文章时添加了一个链接,这可能很有用。我经常碰到这种事情。我绝不是一个CSS大师……我通常听从我们团队中的红色CSS成员,而这几乎总是归结为一些古怪的级联/特定冲突。您可以看到添加到元素中的样式排除了JQuery的可能性,除非JQuery以某种方式对样式属性进行了错误的格式化。Bradley,我对JQuery还不到一个星期,所以现在我正在尽可能多地吸收。将来我肯定会使用show()和hide()。此外,我还尝试了removeClass()和addClass(),但都没有成功。如果可能,也将使用这两种方法。尝试使用!很重要,很遗憾,重写样式什么也没做。开发工具告诉您重写元素样式的规则是什么?
$('#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');
   });