Jquery ID选择器不适用于变量

时间:2013-05-11 08:08:03

标签: javascript jquery jquery-selectors undefined

我已经读过这样的十亿个问题,但还没有找到答案。

无论如何,当我输入

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]+'"]');
}

你认为双引号可能会把它扔掉吗?

1 个答案:

答案 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选择器。