2013-05-11 46 views
1

我已閱讀了十億個這樣的問題,但從未找到答案。Jquery ID選擇器不能與變量一起工作

無論如何,當我輸入

var variableContainingID = "header"; 
var div = $("#"+variableContainingID); 

返回 '未定義'

但是當我鍵入

var variableContainingID = "header"; 
var div = $('[id^="'+variableContainingID+'"]'); 

它工作正常。 任何想法爲什麼?

UPDATE

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

你真的有一個'ID = 「頭」'元素? – 2013-05-11 08:10:27

+0

您是否在Chrome開發人員控制檯中輸入了此信息?當定義一個變量時它返回'undefined'。 – 2013-05-11 08:10:52

+4

它確實工作... http://jsfiddle.net/qsjrP/我們可能需要看到更多的代碼,因爲我不認爲這個聲明是問題... – 2013-05-11 08:11:03

回答

4

正如你在你的問題中寫道:

var div = $("#"+variableContainingID); 
var div = $('[id^="'+variableContainingID+'"]'); 

這兩條線是不相同的。第一個,將選擇idheader的元素。第二個 選擇具有指定的id的元素,其值與給定字符串(header)完全一致。

所以,如果你有一個這樣的元素:

<div id="headerHere"></div> 

第一個($("#"+variableContainingID))無法選擇,但第二個($('[id^="'+variableContainingID+'"]'))可以選擇元素。 這是因爲您在選擇器中使用了^=。請參閱jQuery API:Attribute Starts With Selector (name^="value")

值得在jQuery中查看所有attribute選擇器。

+0

是的,這絕對不是問題:) – 2013-05-14 07:16:48

+0

@NateL如果這不是問題,那麼最好也發佈HTML,不要看到你的Id它不可能給你確切的解決方案。 – rahularyansharma 2013-05-14 07:35:25

相關問題