我有很多在頁面加載中運行的jquery,它導致我的一個元素消失(使其style = display:none;)。我猜jQuery的hide()函數被錯誤地應用於這個元素,但是我找不到哪個語句導致它。檢測什麼JavaScript函數正在改變加載頁面元素?
是否有任何JavaScript,螢火蟲等功能或工具,將本質上作爲html元素(也許我可以在我的瀏覽器中運行一個)的斷點/監聽器?在頁面加載中看到哪個函數影響該元素會很高興。
我有很多在頁面加載中運行的jquery,它導致我的一個元素消失(使其style = display:none;)。我猜jQuery的hide()函數被錯誤地應用於這個元素,但是我找不到哪個語句導致它。檢測什麼JavaScript函數正在改變加載頁面元素?
是否有任何JavaScript,螢火蟲等功能或工具,將本質上作爲html元素(也許我可以在我的瀏覽器中運行一個)的斷點/監聽器?在頁面加載中看到哪個函數影響該元素會很高興。
您可以在getter/setters中找到元素的訪問位置。然而,setter方法似乎不使用鉻工作...它的工作原理與雷區[火狐β的最新版本,但...所以你可以測試一下我猜=)
myElement.style.__defineSetter__("backgroundColor", function(val)
{
var cur = arguments.callee;
var callLog = "";
while(cur != null)
{
callLog = cur.caller + "\n" + callLog;
//alert(cur.caller);
cur = cur.caller;
}
alert(callLog);
}
);
哦,但它不會讓你真正「設置」變量。要做到這一點,你需要定義一個虛擬變量並設置它。然後,當你定義你的獲得者[與__defineGetter__
]你返回該值
+1 - 我不知道這件事,所以這是一個很好的發現。儘管不是提醒出棧,但可以通過將函數設置爲'function(){debugger; }' – nickf 2010-02-24 23:33:01
哈!我剛剛找到了我想要的答案。 Firebug在HTML選項卡上有一個「break mutate」功能,它將顯示javascript文件中的哪一行正在更改html元素。它是在Firebug 1.5中,今天發佈的1.5.2新版本更新了這個圖標,所以我注意到它,並發現它完全是靠運氣!
http://www.softwareishard.com/blog/firebug/firebug-15-break-on-next/
感謝您嘗試傢伙!
另外,Firebug的斷點參考在一般情況下非常有用:http://getfirebug.com/doc/breakpoints/demo.html – 2010-02-25 18:31:28
你可能會被卡住只是有選擇地評論事物,並觀察它何時破裂... – 2010-02-24 22:52:55