Здравствуйте, необходимо реализовать функцию, которая, переносит HTML в новое место, точнее, это старая логика, сейчас нужно придумать более сложный способ.
И так, вот старая функция:
var row = this.scope.find('[data-gamename="'+ data.gamename +'"] > .ipsDataItem_main > ul.ipsDataItem_subList');
var currentPlayer = row.find('[data-player="'+ data.name +'"]');
var currentSID = currentPlayer.parent();
var newSID = row.find('> li.usercolor.usercolor-'+ data.sid +'');
var newPlayer = newSID.innerHTML;
currentSID.html(newPlayer);
newSID.html(currentPlayer);
Она переносила пользователя на новый SID, например, с 0 на 5, а 5 на 0, там уже была структура li элементов, сейчас её нет, li нужно создавать через JS, поэтому, прошлый способ не подходит.
Я вот начал, но этого мало, оно переносит на новый SID но старый class остается:
Это функция входа игрока, в принципе в ней реализовано всё что нужно, нужно модифицировать под новые потребности и всё, сейчас буду пробовать, напишу что получилось или нет.
// Вход игрока
var rowElem = this.scope.find('[data-gamename="'+ data.gamename+ '"] > .ipsDataItem_main > ul.ipsDataItem_subList');
var playerElement = '<li class="usercolor usercolor-'+ data.sid +'" data-player="'+ data.name +'"><a href="#" data-ipsHover data-ipsHover-width="225" data-ipsHover-target="'+ ips.getSetting('baseURL') +'index.php?app=wc3&module=activegames&controller=ActiveGames&player='+ data.name +'&server='+ data.realm +'&ping='+ data.ping +'&do=hovercard" data-ipsHover-timeout="0">'+ data.name +'</a></li>';
var insertAfter, insertBefore, uColor;
var sid = data.sid;
rowElem.find('.usercolor').each(function( i ) {
uColor = parseInt($(this).attr('class').replace('usercolor usercolor-', ''));
if (uColor > sid && !insertBefore) {
insertBefore = $(this);
}
if (uColor < sid) {
insertAfter = $(this);
}
});
if (insertAfter) {
insertAfter.after(playerElement);
} else if (insertBefore) {
insertBefore.before(playerElement);
} else {
rowElem.html(playerElement);
}
Как я примерно это вижу, у нас известен только новый SID, сначала необходимо спарсить старый. Затем, старый заменить на новый и наоборот, при этом, нужно сохранить последовательность li элементов.
Изменено пользователем TemKa_SD
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Здравствуйте, необходимо реализовать функцию, которая, переносит HTML в новое место, точнее, это старая логика, сейчас нужно придумать более сложный способ.
И так, вот старая функция:
var row = this.scope.find('[data-gamename="'+ data.gamename +'"] > .ipsDataItem_main > ul.ipsDataItem_subList'); var currentPlayer = row.find('[data-player="'+ data.name +'"]'); var currentSID = currentPlayer.parent(); var newSID = row.find('> li.usercolor.usercolor-'+ data.sid +''); var newPlayer = newSID.innerHTML; currentSID.html(newPlayer); newSID.html(currentPlayer);Она переносила пользователя на новый SID, например, с 0 на 5, а 5 на 0, там уже была структура li элементов, сейчас её нет, li нужно создавать через JS, поэтому, прошлый способ не подходит.
Я вот начал, но этого мало, оно переносит на новый SID но старый class остается:
this.scope.find('[data-gamename="'+ data.gamename +'"] > .ipsDataItem_main > ul.ipsDataItem_subList').find('[data-player="'+ data.name +'"]').removeClass('').addClass('usercolor usercolor-'+ data.sid +'');Это функция входа игрока, в принципе в ней реализовано всё что нужно, нужно модифицировать под новые потребности и всё, сейчас буду пробовать, напишу что получилось или нет.
// Вход игрока var rowElem = this.scope.find('[data-gamename="'+ data.gamename+ '"] > .ipsDataItem_main > ul.ipsDataItem_subList'); var playerElement = '<li class="usercolor usercolor-'+ data.sid +'" data-player="'+ data.name +'"><a href="#" data-ipsHover data-ipsHover-width="225" data-ipsHover-target="'+ ips.getSetting('baseURL') +'index.php?app=wc3&module=activegames&controller=ActiveGames&player='+ data.name +'&server='+ data.realm +'&ping='+ data.ping +'&do=hovercard" data-ipsHover-timeout="0">'+ data.name +'</a></li>'; var insertAfter, insertBefore, uColor; var sid = data.sid; rowElem.find('.usercolor').each(function( i ) { uColor = parseInt($(this).attr('class').replace('usercolor usercolor-', '')); if (uColor > sid && !insertBefore) { insertBefore = $(this); } if (uColor < sid) { insertAfter = $(this); } }); if (insertAfter) { insertAfter.after(playerElement); } else if (insertBefore) { insertBefore.before(playerElement); } else { rowElem.html(playerElement); }Как я примерно это вижу, у нас известен только новый SID, сначала необходимо спарсить старый. Затем, старый заменить на новый и наоборот, при этом, нужно сохранить последовательность li элементов.
Изменено пользователем TemKa_SD