当前位置:嗨网首页>书籍在线阅读

62-解决方案

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.15.2 解决方案

将链分解为单独的语句,在变量中存储各个jQuery对象:

// $('.foo').css({ fontsize: '18px' }).find('.bar').show();
var $foo = $('.foo');
$foo.css({ fontsize: '18px' });
var $bar = $foo.find('.bar');
$bar.show();

现在对于调试你有多种选择。其中之一是使用调试器的单步运行命令逐条运行这些语句,在每一步之后观察变量和页面的状态。

在这段代码中,应该在 $foo$bar 赋值之后检查二者。每个变量的 .length 属性值是多少?这能够告诉你选中的DOM元素数量。每个对象是否包含预期的DOM元素?检查 [0][1][2] 等属性,查看这些DOM元素。

假如 $foo 包含正确的DOM元素,那么在调用 .css() 方法之后发生了什么呢?使用Firebug的CSS Inspector,你会发现CSS的 font-size 属性在方法调用之后没有变化。等一下!是 font-size 而不是 fontsize? 这就是问题所在。查阅文档,你发现编写这条语句的正确方式如下:

$foo.css({ fontSize: '18px' });
$foo.css({ 'font-size': '18px' });

这是一个问题,但是另一个问题是什么呢?在 $bar 赋值之后,如果查看 .length 属性,就会发现它的值为0。这告诉我们,选择元素的操作没有成功。查看HTML和JavaScript代码就能发现,类名拼写错误。

现在在原始的方法链上进行这两处修改:

$('.foo').css({ fontSize: '18px' }).find('.bar').show();

另一种方法是使用Firebug的日志(logging)语句:

// $('.foo').css({ fontsize: '18px' }).find('.bar').show();
var $foo = $('.foo');
console.log( $foo );
$foo.css({ fontsize: '18px' });
console.log( $foo.css('fontsize') );
var $bar = $foo.find('.bar');
console.log( $bar );
$bar.show();

这些 console.log() 调用将揭示 $bar 没有选中任何元素,但在试图记录字体大小时落入了陷阱:在 console.log() 调用中也拼错了 fontSize !

这种情况下组合多种调试技术很有帮助:记录这些变量,使用Firebug的检查器,重新阅读源代码,并让其他人帮你查找问题。