这两个JQuery函数应该产生相同的行为吗?

时间:2009-07-08 20:59:28

标签: javascript jquery

假设我有以下两个JQuery函数 -

第一个有效:

$("#myLink_931").click(function ()
{
  $(".931").toggle();
});

和第二个,它不起作用:

$("#myLink_931").click(function ()
{
  var class_name = $(this).attr("id").split('_')[1];
  $("."+class_name).toggle();
});

我想用第二个替换第一个,这是更通用的,但是找不到任何明显的语法问题,第二个可能阻止它工作。

我的猜测是语法有问题:

 "."+class_name

这是错误的语法吗?

5 个答案:

答案 0 :(得分:3)

这是调试器的用途。单步执行代码并确保按预期计算class_name。调试器应该让你查看“。”+ class_name的结果。

答案 1 :(得分:3)

我创建了一个示例页面并删除了您的示例代码,并且它按预期工作。也许页面上还有另一个问题?你可以发布到实际网站的链接吗?

以下是我使用的代码:

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title></title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
    <script src="scripts/script.js" type="text/javascript"></script>
</head>
<body>
    <div id="myLink_931">Click Me</div>
  <div class="931">HI</div>
</body>
</html>

和脚本文件:

(function($) {
    $(document).ready(function() {
        $("#myLink_931").click(function() {
            var class_name = $(this).attr("id").split('_')[1];
            $("." + class_name).toggle();
        });
    });
})(jQuery);

答案 2 :(得分:3)

他们也一样。

<强> Working Demo

答案 3 :(得分:1)

不允许类名和ID以数字开头 - 但不解释为什么一个有效,另一个则不然。如上所述,请提供更多信息。

答案 4 :(得分:1)

你是否有可能没有在准备语法中包装你的第二个例子[即$(function(){ })]这意味着尚未在DOM中创建元素吗?