代码之家  ›  专栏  ›  技术社区  ›  stephenhay

Javascript/jQuery函数在<IE8中未定义

  •  1
  • stephenhay  · 技术社区  · 14 年前

    不久前,我在这里问了一个问题,当一个标题在一个给定的容器中超过一行时,我如何计算,然后把这些行包装在 <span> :

    Use Javascript/jQuery to determine where a heading breaks to the next line?

    我选择了一个对我非常有用的答案,至少在我签入IE7和IE6之前,这个脚本处理的所有标题都呈现为

    " 未定义未定义未定义未定义未定义 [...]"

    在页面上。因为我不是一个真正的JavaScript人(这就是为什么我一开始会问这样一个问题),所以我很难找出问题所在。我假设了一个未定义的变量或其他什么,但我似乎无法理解它。

    有人能帮忙吗?

    我将在此处重复代码,但有关上下文,请参阅上面的链接:

    $(function(){
      $h = $('.fixed').find('h3');
      $h.each(function(i,e){
        var txt = $(e).text();
        $th = $('<h3 />').prependTo($(e).parent());
        var lh = $(e).text('X').height();
        $(e).text('');
        while (txt.length > 0) {
            $th.text($th.text() + txt[0]);
            txt = txt.slice(1);
            if (($th.height() > lh) || (txt.length <= 0)) {
                var shc = $th.text().split(' ');
                var ph = shc.slice(0,-1).join(' ')+' ';
                if (txt.length <= 0) { ph += shc.pop(); }
                $('<span />').text(ph).appendTo($(e));
                $th.text(shc.pop());
            }
        }
        $th.remove();
      })
    });
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Psytronic    14 年前

    你需要改变

    $th.text($th.text() + txt[0]);
    

    成为

    $th.text($th.text() + txt.charAt(0));
    

    IE<8不接受通过数组索引的字符串位置;)

    样式设计不起作用,但这将是一个CSS问题,我不能在离开之前解决。但一切都是用跨度包裹的:)

        2
  •  0
  •   Matt    14 年前

    什么也没向我跳出来。但是,既然你在评论中提到你在Firebug中看到“未定义”,我就从这里开始。尽管这些浏览器出现了优雅的故障,但事实上,您看到了未定义,这是您发现问题的第一个提示,因为更难诊断IE6/7。我将在函数中使用Firebug和断点,或者使用一些console.log()调用来记录每一步使用的值。一旦你开始看到未定义。。。你可能发现了你的问题。