我在使用带有jquery的元素时遇到了麻烦。我在var中构造名称,如:
var myId = "#" + myGotId;
$(myId).attr("title", "changed");
$(myId)返回空。我希望通过id获取我的元素,但是构建我的Id动态地连接字符串。
由@Pointy编辑 - OP在评论中提供的其他代码:
var form = $('form#formDefaultValue');
$(':submit', form).click(function(event) {
event.preventDefault();
$.post(form.attr('action'), form.serialize(), function(data, status, XMLHttpRequest) {
if (status == 'success') {
$("#msgInformation").html("Your changes have been successfully saved.");
jQuery("#spanDefaultValue").attr("class", "db");
var g = indexNodeSelected;
g = g.replace("\\", "\\\\\\\\");
$('#'+ g).find("span").attr("class", "");
}
答案 0 :(得分:21)
我不确切知道发生了什么,因为您没有发布太多代码,但确保您的Javascript代码在之后运行目标“id”值的元素已包含在DOM。如果你有这个:
<html>
<head>
<script>
var myId = '#' + myGotId;
$(myId).whatever();
然后这将无效,因为代码运行时将不会看到实际的页面。
相反,试试这个:
<script>
$(function() {
var myId = '#' + myGotId;
// ...
});
确保您的“myGotId”字符串正是您期望的值(即,编码到目标元素的“id”属性中的值)也很重要。
编辑如果您认为自己正在构建“id”,那么您可以尝试将其作为替代方案:
$(document.getElementById(myGotId)).whatever()
换句话说,只需传递给$()
函数,就可以将一个普通的DOM元素“包装”在jQuery对象中。如果这样做,那么问题可能是你的“id”值在某种程度上混淆了选择器引擎。 “id”值是否包含“。”什么机会?
答案 1 :(得分:2)
你需要额外的变量吗?试试没有它,像这样:
$("#" + myGotId).attr("title", "changed");
答案 2 :(得分:2)
你的jQuery没有按预期工作的原因是因为它在DOM完全加载到浏览器之前执行。
将您的jQuery代码放入文档就绪函数中,它将起作用。
$(document).ready(function () {
// code that will run once the entire DOM is loaded into the browser
});
示例Firebug控制台输出
这里发生了什么?
为什么?
在浏览器有机会解析页面上的HTML之前,可以加载脚本。在浏览器完全解析DOM并构建它的DOM树之前,它将无法告诉您元素是否存在。这就是为什么在文档准备好之前运行jQuery选择器通常会导致意外结果的原因。
示例脚本
//run possibly before DOM is loaded into browser
var selector = "#crazy-image";
console.log("DOM may not be ready yet");
console.log($(selector));
$(document).ready(function () {
// code that will run once the entire DOM is loaded into the browser
console.log("DOM ready");
console.log($(selector));
});
答案 3 :(得分:0)
正如此示例所示,您的代码应该正常工作: 确保在创建要获取的元素后执行脚本。 确保ID正确无误。
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.4.4.js"></script>
</head>
<body>
<div id="mydiv">Hello</div>
<script>
var myGotId = 'mydiv';
var myId = "#" + myGotId;
$(myId).attr("title", "changed");
</script>
</body>
</html>