0

我有一个简单的jsfiddle,我可以在其中获取 div 的值。

在该$(document).ready(function(){})部分中,我得到了 div 的文本就好了。当我稍后在函数中尝试使用该值时,该值会发生变化(除非我添加.innerHTML)。为什么该变量的值会发生变化?换句话说,为什么我.innerHTML稍后调用该变量时需要添加?

谢谢!

<div id="my_div">1</div>

// Javascript/JQuery

$(document).ready(function(){ 
    var my_div = $("#my_div").text();

        alert(my_div);

        func();
    });


function func(){    
    alert(my_div); // why does the value change here...why???
        alert(my_div.innerHTML); // why do I need ".innerHTML' here???
};
4

5 回答 5

2

该值会更改,因为您没有请求 div 的任何特定“功能”。你只是想提醒一个元素......

首先,您已经在函数内部分配了 my_div。如果将 移到var my_div函数外部,它将成为全局变量,而不是局部变量。

编辑小提琴:这里

于 2013-01-14T16:50:24.867 回答
2

因为您声明 my_div 不在全局范围内。

你应该这样做:

var my_div;
$(document).ready(function(){ 
    my_div = $("#my_div").text();

    alert(my_div);

    func();
});
于 2013-01-14T16:51:19.713 回答
2

这是因为默认情况下,所有具有 ID 的元素都是全局范围的属性。

所以基本上my_div在你function func()的调用中是一样的window.my_div

尝试删除var my_div = $("#my_div").text(),您仍然可以在func().

这个问题是相关的Do DOM tree elements with ids become global variables?

于 2013-01-14T16:54:32.260 回答
1
$(document).ready(function(){ 
var my_div = $("#my_div").text();

    alert(my_div);

    func(my_div);
});


function func(my_div){    
    alert(my_div); // why does the value change here...why???
};

您需要传递对 my_div 的引用。

于 2013-01-14T16:54:42.177 回答
0

当您执行以下操作时:

function func(){    
    alert(my_div); // why does the value change here...why???
    alert(my_div.innerHTML); // why do I need ".innerHTML' here???
};

my_div您可以通过它的 id ( )获得一个 html 元素。
为什么 ?因为my_divins 没有声明为全局。
这就是为什么当你提醒你得到一个对象时。

尝试使用其他名称运行您的代码my_div,例如:

$(document).ready(function(){ 
    var div = $("#my_div").text();

    alert(my_div);

    func();
});


function func(){
    alert(div);
    alert(div.innerHTML);
};

您将看到您收到以下错误:

Uncaught ReferenceError: div is not defined 
于 2013-01-14T16:57:59.320 回答