0

我对处理 JQuery 的 Internet Explorer 或处理 IE 的 JQuery 有疑问 :)

只是我有以下代码:

$(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 代码后附上了 2 张源代码图片:

在FF(完美!):Firefox 结果的源代码快照

在 IE 中(错误!):IE 结果的源代码快照

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

希望找到解决方案。

注意:我使用的是 JQuery 1.7.1 ...这个问题在 ie8 和 ie9 中发布。

jQuery("*").each(jQuery("*").get().reverse(), function (i) {注 2:使用或时我得到最差的结果jQuery(jQuery("*").get().reverse()).each(function (i) {

编辑 1 & 2:在这个问题里面

编辑3:

注意 3:页面上的所有元素都会出现此问题,无论该元素甚至script、、、 ……等等htmlstyle而且最奇怪的是,有些元素没有得到任何接触!看这个截图: 所有元素,但也有一些!

编辑4:

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

在 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;
}

问候,

4

3 回答 3

3

难道这没有任何帮助吗?

body.rtl * {
  text-align: right !important;
}

text-align: left您确实应该使用特定的 CSS 类标记应该保留规则的元素,以将它们与其他元素分开。

你也可以试试这个 CSS 来切换 text-align 值

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

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

我还没有测试过这个,但它应该使所有具有包含“text-align:left”的样式属性值的元素都使用该规则。

更新

在jsFiddle创建了一个示例。希望能帮助到你。

更新 2

使用 jQuery 的新解决方案:jsFiddle

$('body *[style*="text-align"]').each(function() {

    // Toggle text-align value
    $(this).css('text-align', (($(this).css('text-align') == 'left') ? 'right' : 'left'));

});
于 2011-11-28T16:16:38.833 回答
1

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

替换这个:

$("*").each(function (i) {

有了这个:

$.each($("*").get().reverse(), function (i) {
于 2011-10-20T14:26:33.220 回答
0

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

听起来jQuery 伪选择器对你有用,$(":visible")但考虑到 IE 将此值分配给完全无效的元素,我对此表示怀疑。

这可能很疯狂,但也许您应该考虑列出一个对其style="text-align: right"有效的内容级 DOM 元素。这可能是一项非常艰巨的任务,具体取决于产品的年龄以及它生成的 HTML 类型。如果您正在处理一组十个或十二个元素,则可能值得编写一个样式表来处理它并通过 jQuery 加载它(假设您不能轻松地将它包含在所有页面上)。

于 2011-11-28T16:10:17.007 回答