Как получить индекс определенного пропущенного элемента в массиве элементов формы?

0

У меня есть этот html:

<div class="content vertical-gradient">
    <div id="button_id0" class="button services rounded-corners trans-effect"><a class="title-text" href="index.php?services">Tjänster</a></div>
    <div id="button_id1" class="button prices rounded-corners trans-effect"><a class="title-text" href="index.php?prices">Priser</a></div>
    <div id="button_id2" class="button about-me rounded-corners trans-effect"><a class="title-text" href="index.php?aboutme">Om mig</a></div>
</div>

Когда dom был загружен, я сохраняю текст (html) с каждой кнопки следующим образом:

$(".button").each(function(index) {            
       //Store all texts (html) from buttons for later user with drag/drop       
       lastHtml[index] = $(this).html();            
}

где lastHtml определяется как глобальный массив.

В некоторых случаях я хочу изменить html кнопки, но когда я перетаскиваю ее где-то, я хочу вернуться в исходное состояние. Поэтому я сохраняю тексты (html), когда dom загружается в переменную lastHtml-array.

В раскрывающемся списке я получаю индекс кнопки по его идентификатору (номер индекса извлекается кнопкой элементов (useButtonId'), ex. Button_id1 возвращает индекс 1, button_id2 возвращает индекс2 при отбрасывании).

$( ".content").droppable({
    accept: ".button.dragme", //Must come from this dragged element
    drop: function( event, ui ) {                                                           
        //Show ordinary text for button                     
        var id = $(ui.helper).prop("id");
        var idArray = id.split("_id");                  //array of split between _id, example: [0] = button, [1] = 2                        
        var useButtonId = idArray[1]; 
        $(ui.helper).addClass("trans-effect").removeClass("dragme").removeClass("ui-draggable").html(lastHtml[useButtonId]);
    }   
}

НО, что я действительно хочу, это что-то вроде этого: (Я хочу, чтобы у меня было столько кнопок, которые мне нравятся, без необходимости учитывать идентификатор, но я все же хочу, чтобы все html-значения сохранялись при загрузке dom и восстановлении оригинала состояние при перетаскивании и удалении определенной кнопки).

<div class="content vertical-gradient">
    <div name="button[]" class="button services rounded-corners trans-effect"><a class="title-text" href="index.php?services">Tjänster</a></div>
    <div name="button[]" class="button prices rounded-corners trans-effect"><a class="title-text" href="index.php?prices">Priser</a></div>
    <div name="button[]" class="button about-me rounded-corners trans-effect"><a class="title-text" href="index.php?aboutme">Om mig</a></div>
</div>

Я думаю!? Я могу использовать index(), но я действительно не могу понять, как это сделать. Я пробовал:

$(ui.helper).index())
$('.content').index(ui.helper))

но ни один из них, похоже, не вернет правильный индекс.

Теги:

1 ответ

1
Лучший ответ

Может быть проще хранить html на самом элементе с помощью .data()

var $btns=$('.button')
$btns.each(function(){
  var $btn=$(this);
  $btn.data('lastHtml', $btn.html());
});

data() - как getter, так и setter, поэтому для сброса:

$(this).html( $(this).data('lasthtml') );

Альтернативно создайте атрибут или хранилище данных, например btn-index чтобы ссылаться на ваш сохраненный массив

$btns.each(function(index) {            
       //Store all texts (html) from buttons for later user with drag/drop       
       lastHtml[index] = $(this).html(); 
       $(this).attr('btn-index',index)/* or*/.data('btn-index',index);           
});

Если использовать его только в своем примере с droppable, то хранение элемента по-прежнему кажется простым способом

  • 0
    Оба ваших решения абсолютно жизнеспособны! Большое спасибо!!! (Думаю, я бы предпочел хранить данные об элементах)
  • 0
    гораздо проще, чем разбор строк идентификаторов наверняка ... Я всегда ищу способы избежать этого
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню