아래에 표시된 jQuery를 실행할 때 previousDiv의 값은 항상 []입니다. .prev ('div') 및 .prev()를 비롯한 .prev() 함수의 여러 변형을 모두 동일한 결과로 시도했습니다. 여기 다른 요소 바로 전에 div를 생성하기 위해 DOM을 탐색하는 데 문제가 있습니다.
는 jQuery를하다 :<div>
@* Display user email. *@
<h3>@user.Email</h3>
<div>
<div id="DisplayUserRoles">
@{
@* Display roles user belongs to. *@
foreach (var role in userRoles)
{
@* Remove user from role button. *@
<button id="[email protected]" value="@role.RoleName" onclick="RemoveUserFromRole(this);">X</button>
<label id="[email protected]">@role.RoleName</label>
<br />
}
}
</div>
<br />
@{
@* Create ListBox with roles user does not belong to. *@
var items = rolesUserDoesNotBelongTo.Select(i => new SelectListItem
{
Value = i.RoleName,
Text = i.RoleName
});
string listBoxId = "listboxRoles_";
listBoxId = listBoxId + user.Email;
}
@Html.ListBox(listBoxId, items, new { @class = "AvailableRoles" })
@* Add user to role button. *@
<button id="[email protected]" class="AddToRole" value="@user.Email">Add To Role</button>
</div>
</div>
난 그냥 전에 다른 버튼과 레이블을 추가하는 것을 시도하고 최종 결과를 들면 다음과 같습니다
$('.AddToRole').click(function(evt) {
var path = document.URL;
var thisUser = this.value;
var previousControl = $(this).prev('.AvailableRoles');
var newUserRole = previousControl[0].options[previousControl[0].selectedIndex].text;
var newHTML = "<button id='button_DeleteRole_" + newUserRole +"' class='DeleteRole' value=" + newUserRole + ">X</button> <label id='label_DeleteRole_" + newUserRole + "'>" + newUserRole + "</label><br />";
var previousDiv = $(this).prev('#DisplayUserRoles');
$(previousDiv).append(newHTML);
페이지의 HTML/면도기 코드 #DisplayUserRoles에 대한 닫는 div 태그.
아마도 '오탈자'이벤트를 닫지 않을 것입니다. '})' – RASG
HTML을 트래버스하는 방법을 알기 위해서는 템플릿 언어가 아닌 실제 HTML (브라우저의보기/소스에서)을 볼 필요가 있습니다. – jfriend00
.prev()는 같은 요소 유형의 형제를 선택한다는 것이 문제라고 생각합니다. 귀하의 경우 $ (this)는 버튼이므로 다른 형제는없고 .prev()는 []를 반환합니다. –