jQuery: 用其他元素替换元素?
jQuery: replace elements with other elements?
有没有一种简单的方法可以用其他元素替换所选元素?
我以为 replaceWith
会那样做,但它实际上用提供的元素替换了每个出现的地方。所以在我的例子中,它实际上复制了元素(因为它对每次出现都是如此)。
考虑这个例子:
var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>'
$('.discount_select option:not(:first)').replaceWith(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="discount_select">
<option value="0"></option>
<option value="4">45% Discount</option>
<option value="5">10% Discount</option>
</select>
结果是新选项被复制了。我得到两个 15%
和两个 18%
选项。但我只需要用提供的选项替换选定的选项(而不是对每个选项一个一个地执行此操作)。
你可以在这里看到:https://jsfiddle.net/6on7mzqw/
P.S。我想可以先删除不需要的元素,然后添加新元素,但也许有更简单的方法?
要解决您的问题,您可以使用 child select 或 :nth-child(n)
按顺序到 select 个特定元素
像这样
var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>'
$('.discount_select option:nth-child(2)').replaceWith(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="discount_select">
<option value="0"></option>
<option value="4">45% Discount</option>
<option value="5">10% Discount</option>
</select>
您的问题有很多解决方案,其中之一
将 HTML 中的新内容放在第一个选择的内容之前,然后返回到原始选择并删除它们。
var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>'
$('.discount_select option:not(:first)')
.first().before(html).end().remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="discount_select">
<option value="0"></option>
<option value="4">45% Discount</option>
<option value="5">10% Discount</option>
</select>
jQuery 中似乎没有处理这种特定情况的方法,因此我们只能删除并添加新元素。
var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>'
$('.discount_select option:not(:first)').remove();
$('.discount_select option:first').after(html);
您最好删除不必要的选项并一次性添加新的选项。下面的解决方案在一次操作中实现了这一点,这意味着只重写 DOM 一次,就速度而言,这被认为是一种很好的做法。
var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>';
$('.discount_select').html(
$('.discount_select option').first().add(html)
);
有没有一种简单的方法可以用其他元素替换所选元素?
我以为 replaceWith
会那样做,但它实际上用提供的元素替换了每个出现的地方。所以在我的例子中,它实际上复制了元素(因为它对每次出现都是如此)。
考虑这个例子:
var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>'
$('.discount_select option:not(:first)').replaceWith(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="discount_select">
<option value="0"></option>
<option value="4">45% Discount</option>
<option value="5">10% Discount</option>
</select>
结果是新选项被复制了。我得到两个 15%
和两个 18%
选项。但我只需要用提供的选项替换选定的选项(而不是对每个选项一个一个地执行此操作)。
你可以在这里看到:https://jsfiddle.net/6on7mzqw/
P.S。我想可以先删除不需要的元素,然后添加新元素,但也许有更简单的方法?
要解决您的问题,您可以使用 child select 或 :nth-child(n) 按顺序到 select 个特定元素 像这样
var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>'
$('.discount_select option:nth-child(2)').replaceWith(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="discount_select">
<option value="0"></option>
<option value="4">45% Discount</option>
<option value="5">10% Discount</option>
</select>
您的问题有很多解决方案,其中之一
将 HTML 中的新内容放在第一个选择的内容之前,然后返回到原始选择并删除它们。
var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>'
$('.discount_select option:not(:first)')
.first().before(html).end().remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="discount_select">
<option value="0"></option>
<option value="4">45% Discount</option>
<option value="5">10% Discount</option>
</select>
jQuery 中似乎没有处理这种特定情况的方法,因此我们只能删除并添加新元素。
var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>'
$('.discount_select option:not(:first)').remove();
$('.discount_select option:first').after(html);
您最好删除不必要的选项并一次性添加新的选项。下面的解决方案在一次操作中实现了这一点,这意味着只重写 DOM 一次,就速度而言,这被认为是一种很好的做法。
var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>';
$('.discount_select').html(
$('.discount_select option').first().add(html)
);