我已经读过这样的十亿个问题,但还没有找到答案。
无论如何,当我输入
var variableContainingID = "header";
var div = $("#"+variableContainingID);
返回'undefined'
但是当我输入
时var variableContainingID = "header";
var div = $('[id^="'+variableContainingID+'"]');
工作正常。 有什么想法吗?
更新
var json = '{"divs":['
var children = $(".parent_container > div");
var idArray = [];
var numArray = [];
for (var x=0; x<children.length; x++) {
var eleid = $(children[x]).attr("id");
idArray.push('"'+eleid+'"');
numArray.push(x+1);
}
var idString = idArray.join(",");
var numString = numArray.join(",");
json += idString;
json += '],"number":['+numString+']}';
var obj = JSON.parse(json);
for (x in obj["divs"]) {
var div = $('[id^="'+obj["divs"][x]+'"]');
}
你认为双引号可能会把它扔掉吗?
答案 0 :(得分:4)
正如你在问题中写的那样:
var div = $("#"+variableContainingID);
var div = $('[id^="'+variableContainingID+'"]');
这两行不完全相同。第一个,将选择id
header
的元素。第二个,
选择具有指定id
的元素,其值始于给定字符串(header
)。
所以如果你有这样的元素:
<div id="headerHere"></div>
第一个($("#"+variableContainingID)
)无法选择它,但第二个($('[id^="'+variableContainingID+'"]')
)可以选择该元素。
这是因为您在选择器中使用了^=
。请参阅jQuery API:Attribute Starts With Selector (name^="value")。
值得在jQuery中查看所有attribute
选择器。