【发布时间】:2011-02-20 05:34:03
【问题描述】:
所以我正在使用 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;
改变显示属性的鼠标功能:
$('#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');
});
【问题讨论】:
-
无论如何,您可以将 code-sn-p 缩减为导致问题的简单示例?或者至少提供一些有关导致问题的确切 ID/类的信息?您可以执行的任何格式来清理该 sn-p 也会很有用。干杯。
-
好的,尽量把它剪下来。
-
$('#'+tVal)呃。有人听说过document.getElementById(tval)吗? jQuery hash-appending id-getter 在 Web 上非常流行……但它又慢又笨拙。 -
@Delan - 我和其他人一样讨厌字符串添加,但问题在于 Javascript 本身。它非常需要一个字符串格式化程序。毫无疑问,市场上有很多解决方案,但它需要使用语言。就 jQuery id 而言,我喜欢这样的语法:
jQuery({id: tVal})或jQuery({'class': classVar})。 jQ 1.4 已经提供了 MooTools,例如使用对象作为参数的元素创建 - milesj.me/blog/read/77/Element-Creation-In-JQuery-1.4。像这样的选择器也会很棒。 -
@Delan - 实际上 jQuery 在检测 ID 选择器时在内部使用 document.getElementById,所以这里的慢和笨拙并不是非常准确。
标签: jquery css internet-explorer google-chrome append