将项目移到开头

时间:2018-10-11 20:51:16

标签: jquery html

我写了一个元素列表,可以选择html收音机。我希望将选择该字段的div移到列表的最开始(列表的所有元素上方)。你知道我该怎么做吗?

我的html代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="elements">
  <div class="element">
    <span>Option 1</span>
    <input type="radio" name="var" value="1">
  </div>
  <div class="element">
    <span>Option 2</span>
    <input type="radio" name="var" value="2">
  </div>
  <div class="element">
    <span>Option 3</span>
    <input type="radio" name="var" value="3">
  </div>
</form>

4 个答案:

答案 0 :(得分:2)

$('.elements .element input[type=radio]').change(function() {
  $(this).closest('.element').prependTo('.elements');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="elements">
  <div class="element">
    <span>Option 1</span>
    <input type="radio" name="var" value="1">
  </div>
  <div class="element">
    <span>Option 2</span>
    <input type="radio" name="var" value="2">
  </div>
  <div class="element">
    <span>Option 3</span>
    <input type="radio" name="var" value="3">
  </div>
</form>

答案 1 :(得分:1)

因此仅靠CSS不能完全做到这一点。在CSS4 :has selector删除之前,我们仍然必须使用javascript根据父级的子级设置样式。

但是我们可以使用flexbox to reorder元素(而不是删除它们并重新添加它们,这会导致保存元素状态的问题):

const options = document.getElementById('options')

options.addEventListener('click', (event) => {
  const elements = Array.prototype.slice.call(event.currentTarget.querySelectorAll('.element'))
  elements.forEach(element => element.classList.remove('selected'))
  event.target.closest('.element').classList.add('selected')
})
#options {
    display: flex;
    flex-flow: column nowrap;
}

.element {
    border: 1px solid #ace;
    order: 1;
}

.element.selected {
    border: 1px dotted #ace;
    order: 0;
}
<form id="options">
  <div class="element">
    <label>Option 1
        <input type="radio" name="var" value="1">
    </label>
  </div>
  <div class="element">
    <label>Option 2
      <input type="radio" name="var" value="2">
    </label>
  </div>
  <div class="element">
    <label>Option 3
      <input type="radio" name="var" value="3">
    </label>
  </div>
</form>

答案 2 :(得分:0)

$(function () {
        $('input[type=radio][name=var]').change(function () {
        var divClassElement = $("span:contains('Option " + this.value + "')").parent();
        divClassElement.prependTo($(".elements"));
    });
})

答案 3 :(得分:-2)

附加选定的项目,然后将其从列表中删除

删除:https://api.jquery.com/remove/ 附加:http://api.jquery.com/append/