Это потому, что вы экранируете специальные символы (что правильно для селектора), но идентификатор не нужно экранировать. Рассмотрим:
$("#protectedGroupDiv100").append("<div id='groupMemberEntryDiv" + emailString + "' class='groupMemberEntryDivs'>hey</div>");
Формирует:
<div id="groupMemberEntryDivblahblah\:gmail\.com" class="groupMemberEntryDivs"></div>
Посмотрите, как это создает элемент с идентификатором: #groupMemberEntryDivblahblah\:gmail\.com
но позже вы используете селектор #groupMemberEntryDivblahblah\:gmail\.com
, который выглядит так же, но jQuery ищет на самом деле #groupMemberEntryDivblahblah:gmail.com
. Поскольку идентификатор вашего элемента содержит обратную косую черту, jQuery не находит соответствия для селектора.
Чтобы исправить это, установите ID перед тем, как его убрать:
$.each(emailArray, function(index, emailString){
emailString = emailString.replace("@", ":"); //Element attributes cannot contain "@"
$("#protectedGroupDiv100").append("<div id='groupMemberEntryDiv" + emailString + "' class='groupMemberEntryDivs'>hey</div>");
emailString = emailString.replace(/(:|\.)/g,'\\$1'); //Escape ':' and '.'
alert($("#groupMemberEntryDiv" + emailString).length);
});
Вот модифицированный jsFiddle .
Хотя это работает, я не рекомендую иметь электронные письма пользователей в разметке. Как намекнули другие, это может привести к проблемам с безопасностью.