JQuery与IE读取内置css属性,如何防止?

JQuery与IE读取内置css属性,如何防止?,jquery,css,internet-explorer,text-align,Jquery,Css,Internet Explorer,Text Align,我对internet explorer处理JQuery或JQuery处理IE有问题:) 简单地说,我有以下代码: $(function () { $("*").each(function (i) { var textalign = $(this).css("text-align"); if (textalign == "left") {$(this).css({'text-align': 'right'});} else if (textalign == "r

我对internet explorer处理JQuery或JQuery处理IE有问题:)

简单地说,我有以下代码:

$(function () {
   $("*").each(function (i) {
    var textalign = $(this).css("text-align");
    if (textalign == "left") {$(this).css({'text-align': 'right'});} 
      else if (textalign == "right"){$(this).css({'text-align': 'left'});}
   });
}); 
代码的功能是交换所有标签的文本对齐,在FF和Chrome中,这段代码做得很好,但在IE上我有一个问题,我认为它在更改父属性后读取继承的文本对齐属性并再次交换它

为了了解发生了什么,在应用JQuery代码后,我在这里附上了两张源代码的图片:

在FF(完美!):

在IE中(错误地!):

顺便说一句,如果您想知道如何使用这种方式,我有一个开源项目,在数百个JSP上使用内联样式,还有表,所以它的解决方案可以翻转布局并支持多语言产品(支持ltr和rtl语言)

希望能找到解决办法

注意:我正在使用jQuery1.7.1。。。这个问题发布在ie8和ie9中

注2:我在使用
jQuery(“*”)时得到了最差的结果。each(jQuery(“*”).get().reverse()、function(I){
jQuery(jQuery(“*”).get().reverse())。each(function(I){

编辑1和2:在这个问题中

编辑3:

注3:问题发生在页面上的所有元素上,不管该元素是什么,
script
html
style
,…等等,最奇怪的是一些元素没有任何接触!请参见此屏幕截图:

编辑4:

我的问题部分解决了,在IE9上运行良好,在IE8不运行,解决方案来自,在尝试了许多方法之后,总结了我的代码:

在JQuery代码中:

if (jQuery.browser.msie == false || jQuery.browser.msie == undefined) { 
            if (textalign == "left") {jQuery(this).css({'text-align': 'right'});} 
            else if (textalign == "right"){jQuery(this).css({'text-align': 'left'});}
        }
在仅为IE加载的CSS文件中:

body *[style*="text-align: left"] {
  text-align: right !important;
}

body *[style*="text-align: right"] {
  text-align: left !important;
}

关于,

为什么不通过反向执行循环来避免问题

替换此项:

$("*").each(function (i) {
为此:

$.each($("*").get().reverse(), function (i) {

为什么不通过反向执行循环来避免这个问题呢

替换此项:

$("*").each(function (i) {
为此:

$.each($("*").get().reverse(), function (i) {

这是一个非常有趣的问题。从本质上讲,听起来您希望选择DOM中可以包含内容的部分(
,等等),同时排除所有其他元素

听起来jQuery psuedo选择器
$(“:visible”)
适合您,但考虑到IE将此值分配给了完全无效的元素,我对此表示怀疑


这可能是疯狂的,但也许你应该考虑列出一个列表内容级别的DOM元素,其中<代码>样式=“文本对齐:右”。是有效的。这可能是一项非常艰巨的任务,具体取决于产品的年龄和它生成的HTML类型。如果您处理的是一组10或12个元素,那么编写一个样式表来处理这个问题并通过jQuery加载它可能是值得的(假设您不能轻松地将它包含在所有页面上).

这是一个非常有趣的问题。从本质上讲,听起来您希望选择DOM中可以包含内容的部分(
,等等),同时排除所有其他元素

听起来jQuery psuedo选择器
$(“:visible”)
适合您,但考虑到IE将此值分配给了完全无效的元素,我对此表示怀疑


这可能是疯狂的,但也许你应该考虑列出一个列表内容级别的DOM元素,其中<代码>样式=“文本对齐:右”。

是有效的。这可能是一项非常艰巨的任务,具体取决于产品的年龄和它生成的HTML类型。如果您处理的是一组10或12个元素,那么编写一个样式表来处理这个问题并通过jQuery加载它可能是值得的(假设您不能轻松地将它包含在所有页面上).

这有什么帮助吗

body.rtl * {
  text-align: right !important;
}
您确实应该使用特定的CSS类标记那些应该保持
文本对齐规则:left
的元素,以将它们与其他元素分开

您也可以尝试使用此CSS切换文本对齐值

body *[style*="text-align: left"] {
  text-align: right !important;
}

body *[style*="text-align: right"] {
  text-align: left !important;
}
我还没有测试过这个,但它应该使所有元素的样式属性值都包含“text align:left”才能使用该规则

更新

在上创建了一个示例。希望对您有所帮助

更新2

使用jQuery的新解决方案:


这能帮上忙吗

body.rtl * {
  text-align: right !important;
}
您确实应该使用特定的CSS类标记那些应该保持
文本对齐规则:left
的元素,以将它们与其他元素分开

您也可以尝试使用此CSS切换文本对齐值

body *[style*="text-align: left"] {
  text-align: right !important;
}

body *[style*="text-align: right"] {
  text-align: left !important;
}
我还没有测试过这个,但它应该使所有元素的样式属性值都包含“text align:left”才能使用该规则

更新

在上创建了一个示例。希望对您有所帮助

更新2

使用jQuery的新解决方案:


有些人可能会说你为此疯狂,但这里有一个链接可以帮助你m8,更好的是,你应该使用css来实现这一点,并使用子继承使用大于和小于,
#selector“>”p{text align:right;}
@Val谢谢,但rtl没有解决问题,是的,这几乎完成了所有工作,但问题在于“内联”样式与“文本对齐”"如果它使用了应该更好解决的类,但不是!你的问题是使用内联线,这是一个糟糕的做法。使用display:block和float:left/right组合,这样每个分隔符都是一个块,而不是内联的,它更容易管理,只有边距和填充…顺便说一句,链接是专为阿拉伯语和其他语言设计的它从右向左写,这是你应该做的,并且很容易在两者之间切换。有些人可能会认为你对此很疯狂,但这里有一个链接可以帮助你m8,更好的是,你应该使用css来实现这一点,并使用子继承使用大于和小于,
#selector“>”p{text align:right;}
@Val谢谢,但是rtl没有解决问题,是的,几乎所有的工作都完成了,但问题在于“