2012-09-23 140 views
0

這讓我瘋狂。我試圖通過jQuery中的ID選擇DOM元素並將其刪除。儘管我盡了最大的努力,但jQuery總是給我一個未捕獲的錯誤:語法錯誤,無法識別的表達式:#li-/media/photos/KObtu.jpggetElementByID工作,但jQuery的選擇不是

但是,這個ID絕對存在於我的DOM中。所以我決定從圖片中剪下jQuery並使用普通的'javascript'。這工作很好,但我不知道爲什麼。

function DeletePhoto() { 
    //Remove a photo from the server when the delete button is clicked 
    $("#personal-photo-list .delete").click(function() { 
     var photoId = $(this).attr("id").split("-")[1]; 
     $.post("profile/DeletePhoto/", { "photo": photoId }, function(jsonObject){ 
      $("#li-" + photoId).remove(); //What I actually want to call. Does not work 
      $("#li-/media/photos/KObtu.jpg").remove(); //I thought maybe using a variable was throwing things off. This does not work either 
      document.getElementById("li-/media/photos/KObtu.jpg").innerHTML="dsfsdfsdfsdf"; //The exact same id as the statements above. This command successfully replaces the text in the <li> tag 
    }); 
}); 

}

如果有人想了解情況,這裏是HTML的一個片段:

<li id="li-/media/photos/KObtu.jpg"> 
       <img src="/media/photos/KObtu.jpg"> 
       <p> Uploaded on Sept. 23, 2012 | <a href="javascript:void(0)" id="a-/media/photos/KObtu.jpg" class="delete"> Delete </a> </p> 
</li> 

非常感謝你提前。

+0

你爲何用如此怪異的ID? – Oriol

+0

你試過逃避'/'嗎? – nandu

+0

@ user1556487:作爲附註,ID和名稱標記必須以字母([A-Za-z])開頭,後面可以跟隨任意數量的字母,數字([0-9]),連字符( 「 - 」),下劃線(「_」),冒號(「:」)和句點(「。」)。 type-id只要注意'.',因爲jQuery將其視爲一種特殊情況。 – Nope

回答

5

documentation

If you wish to use any of the meta-characters (such as !"#$%&'()*+,./:;<=>[email protected][\]^`{|}~ ) as a literal part of a name, you must escape the character with two backslashes: \\ .

/是一個元字符,所以你必須逃避它。

+1

而'.jpg'是一個類選擇器... –

+0

讓我們只希望'jpg'不會成爲'png',否則我們可能會以混淆的類名結束。我忘記了這個詞的名稱是什麼時候命名像「紅色」等類的。 – Nope

2

貴麗ID使用連字符(劃線),但你的jQuery選擇使用下劃線

編輯:另外,您也可以使用類似:

$(this).parents("li").remove(); 
+0

oops。最初,我的ID已經強調了他們,並且我轉而使用desh,因爲我讀了一些下劃線可能在id字符串中失敗的地方。不幸的是,當我在jQuery選擇器中使用短劃線時,仍然存在這個問題。讓我試試你發佈的其他建議。 – Nick

+0

推測第二個建議有效(它應該這樣做:p)我建議擺脫LI和A標記上的ID--它們不再需要了,正如其他一些海報所指出的那樣,它們'並不完全有效 –