#javascript #html #jquery
Вопрос:
У меня есть такой список:
<ul>
<li>1
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="1"></input>
</li>
<li>2
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="2"></input>
</li>
<li>3
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="3"></input>
</li>
<li>4
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="4"></input>
</li>
</ul>
Я хочу переключать позиции вверх или вниз.
Я делаю это с помощью этого кода
$(function() {
$('.up').on('click', function(e) {
var wrapper = $(this).closest('li')
wrapper.insertBefore(wrapper.prev())
})
$('.down').on('click', function(e) {
var wrapper = $(this).closest('li')
wrapper.insertAfter(wrapper.next())
})
})
Но как я могу изменить значение входных данных (с тем же именем класса) для каждого щелчка вверх или вниз?
Примечание: я получаю доступ только к имени класса для входных данных.(не идентификатор или имя ввода).
Комментарии:
1. Можете ли вы объяснить больше?
2. @Allan не могли бы вы, пожалуйста, проверить живую демонстрацию? например, если я переключу номер 4 на up, я также хочу изменить значение ввода в разделе номер 4 <li> на значение ввода в разделе номер 3 <li>.
3. Теперь я должен работать.
Ответ №1:
Используйте эту функцию для обновления значений:
function changevalue(){
var menus = document.getElementsByClassName("order");
for (var i = menus.length - 1; i >= 0; i--)
{
menus[i].value = i 1;
}
}
Попробуйте это:
$(function() {
$('.up').on('click', function(e) {
var wrapper = $(this).closest('li')
wrapper.insertBefore(wrapper.prev())
changevalue();
})
$('.down').on('click', function(e) {
var wrapper = $(this).closest('li')
wrapper.insertAfter(wrapper.next())
changevalue();
})
})
function changevalue(){
var menus = document.getElementsByClassName("order");
for (var i = menus.length - 1; i >= 0; i--)
{
menus[i].value = i 1;
}
}
ul li:first-child a.up,
ul li:last-child a.down {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>1
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="1"/>
</li>
<li>2
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="2"/>
</li>
<li>3
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="3"/>
</li>
<li>4
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="4"/>
</li>
<li>5
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="5"/>
</li>
<li>6
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="6"/>
</li>
</ul>
Ответ №2:
Попробуйте это:
$(function () {
$('.up').on('click', function (e) {
var wrapper = $(this).closest('li')
wrapper.insertBefore(wrapper.prev())
})
$('.down').on('click', function (e) {
var wrapper = $(this).closest('li')
wrapper.insertAfter(wrapper.next())
})
$('.down,.up').click(function(){
var inputs = $(this).parents('ul').find('.order');
$.each(inputs, function (i, input) {
$(input).val(i 1);
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>1
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="1"></input>
</li>
<li>2
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="2"></input>
</li>
<li>3
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="3"></input>
</li>
<li>4
<a class='up' href='#'>up</a>
<a class='down' href='#'>down</a>
<input type="hidden" class="order" value="4"></input>
</li>
</ul>