2012-09-23 102 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--它们不再需要了,正如其他一些海报所指出的那样,它们'并不完全有效 –