【问题标题】:jQuery/javascript adding class does not work on IE 8,9jQuery/javascript 添加类在 IE 8,9 上不起作用
【发布时间】:2013-01-04 15:08:27
【问题描述】:

我有一个这样的 div:

<div onclick="highlightFunction(<?php echo $id?>);">

我有以下js代码:

 function highlightFunction(id) {   
    var id = "stuff" + stuff_id;
    $('#boss-stuff').find('div').removeClass('highlight-stuff');
    var stuff = $('#' + id).find('div')[0];
    var jStuff = $(stuff);
    jStuff.addClass("highlight-stuff");
 }

这段代码被放置在一个 onlick 句柄函数中。

“highlight-stuff”类只是添加了背景颜色。

我尝试了各种方法,从带有 document.getElementById().className 的 javascript 到 jQuery element.attr("class","stuff") 等。所有这些都适用于各种浏览器,但是 IE 8 和 9 不起作用。背景没有改变。

请帮忙,谢谢,我真的很感激。如果您需要代码中的更多内容,请告诉我。

有人解释说:id 是唯一的,因此不会有超过一个具有相同 id 的元素。 $('#boss-stuff') 有一个 $('#id') 列表。 $('#id') 是一个 li 元素,有 div child(ren)。我想为 div 类添加背景颜色。

【问题讨论】:

  • 什么是jEle?您没有发布它的价值来源。
  • 对不起,这是一个拼写错误。我已经在问题中解决了它。
  • 好吧,.addClass().removeClass() 绝对可以在 IE 中使用。您确定该类的 CSS 不是真正的问题吗?
  • CSS 很长,如果需要澄清问题,我会尝试以可读的方式减少它。代码可以在 Chrome、Firefox 上运行,但 CSS 是否仍有故障导致 IE 8 和 9 无法运行?
  • 您说 addClass 和 removeClass 不起作用,但您没有提供任何证据。我们不知道是添加类失败,还是根本没有应用样式。弄清楚这一点,然后回到我们身边。

标签: javascript jquery internet-explorer-8 internet-explorer-9 addclass


【解决方案1】:

试试这个

var jStuff = $('#' + id).find('div')[0];
jStuff.addClass("highlight-stuff");

【讨论】:

  • 我试过了,还是不行,因为 jStuff 是一个 DOM 元素,这会导致“没有方法 addClass”的错误,因为 addClass 是我认为的 jQuery 的方法。因此,使用此行 jStuff = $(stuff) 将东西转换为 jQuery 对象的原因
  • 也许更好的是 $('#' + id + 'div:first-child')?
  • .find('div').eq(0) 更准确。
  • @Kevin 是的,这确实使代码看起来更好,但仍然无法解决我的 ie 8 和 9 问题
【解决方案2】:

它在其他浏览器而不是IE 中工作的事实听起来像是在DOM Ready 事件中不包含您的代码一样愚蠢。我记得前段时间遇到过类似的问题。

你可以试试(如果你的代码已经不在 DOM 就绪事件中)

HTML

<div onclick="highlightFunction(<?php echo $id?>);">

Javascript

<script type="text/javascript">
// This is really important.. make sure all jQuery is inside the DOM ready event
$(function(){ 
    function highlightFunction(id) {   
        var id = "stuff" + stuff_id;
        $('#boss-stuff').find('div').removeClass('highlight-stuff');
        var stuff = $('#' + id).find('div')[0];
        var jStuff = $(stuff);
        jStuff.addClass("highlight-stuff");
    }
});
</script>

【讨论】:

  • 我已经更新了这个问题。正如我在问题中所说,我将 js 代码放在了 onclick 句柄函数中。那么如何修复它以使其在 DOM 就绪事件中出现呢?对不起,如果我问的是愚蠢的问题。
  • 这听起来可能是问题所在,请从您的onclick 中删除代码,然后将答案中的代码复制并粘贴到您的页面中并试一试。
【解决方案3】:

也许您的 HTML 层次结构太复杂了?我试过这个,addClass 适用于所有浏览器。

HTML

<div id="boss-stuff">
    <div id="stuffst123456">
        <div id=""class="">Div without class</div>
        <div id="" class="highlight-stuff">Div With Class</div>
        </div>
    <div id="st123457">Other Div</div>  
</div>
<input id="testBtn" type="button" value="Click Me" />

JavaScript

   <script type="text/javascript">
    $(document).ready(function () {
        $("#testBtn").click(function () {
            var id = "stuff" + "st123456";
            $('#boss-stuff').find('div').removeClass('highlight-stuff');
            var stuff = $('#' + id).find('div')[0];
            var jStuff = $(stuff);
            jStuff.addClass("highlight-stuff");
        });
    });
</script>

CSS

.highlight-stuff {
color: #ff0000;

}

【讨论】:

  • 是的,这行得通。也许我的问题与 JustAnil 所说的 DOM 就绪事件有关?我注意到在您的测试中,您使用的是单击按钮来触发事件。我可以在 div 本身上触发 onclick 事件吗?但是我的 div 是一个 div 列表,它是动态的,所以我不知道我可以让它像你的代码一样。我如何在所有 div 上设置一个固定的类名,它看起来像这样 $(".fixedClassName").click(function(){}); ,这样可以吗?
  • 使用 $(".fixedClassName").live('click', function(){});请注意,如果您希望只触发选定的 div,请使用 .live 函数。
  • @PiscesLeo 这个解决方案对你有用吗?如果是,你能把是标记为正确答案吗?
猜你喜欢
  • 2012-03-20
  • 1970-01-01
  • 2012-09-09
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多