我要做的是:
在下面的HTML示例中,当用户点击“从上方复制”时,我希望jQuery从点击位置“向上”搜索HTML结构,找到包含class="colors"
的上一个选择框,复制选中的值 FROM ,选择框并使用它在紧邻其下方的选择框中选择相同的值(也使用class="colors"
)。每个选择框都有相同的值集。
示例HTML:
<select class="colors">
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
<a href="#" class="copy-times">Copy from above</a>
<select class="colors">
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
<a href="#" class="copy-times">Copy from above</a>
<select class="colors">
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
<a href="#" class="copy-times">Copy from above</a>
<select class="colors">
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
我尝试了.prevAll()
的各种组合,但我无法让它发挥作用。
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
如果我理解正确的复制意思 - 选择与上一个选择相同的值,请参阅下面的代码。
我选择将selected
属性添加到具有相同value
的选项,并将其从其他选项中删除。
$(".copy-times").on("click", function(e){
var $copyBtn = $(this);
var copied = $copyBtn.prev(".colors").val();
$copyBtn.next(".colors").children().each(function(i,e){
var $option = $(this);
if($option.val() == copied){
console.log(this);
$option.attr("selected", "");
} else {
$option.removeAttr("selected");
}
})
})
&#13;
select {
display: block;
}
a {
display: inline-block;
margin: 10px 0;
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="colors">
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
<a href="#" class="copy-times">Copy from above</a>
<select class="colors">
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
<a href="#" class="copy-times">Copy from above</a>
<select class="colors">
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
<a href="#" class="copy-times">Copy from above</a>
<select class="colors">
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
&#13;
答案 1 :(得分:1)
我一开始认为这一点毫无意义,但现在我看到它在行动中,我发现这种行为是有用的。感谢您耐心解释。
这看起来很基本没什么特别的。
.copy-times
.copy-times
像<a>
nchor above
(var above
)将this
(.copy-times
)之前的兄弟(.prev()
)与班级.colors
({{ 1}})value(select.colors
)。.val()
(this
)下一个兄弟(.copy-times
)与.next()
(.colors
)类值(select.colors
)并设置它是前一个值(.val()
)的值。
above
&#13;
$('.copy-times').on('click', function(evt) {
evt.preventDefault();
var above = $(this).prev('.colors').val();
$(this).next('.colors').val(above);
});
&#13;
select,
a {
display: block;
}
select {
margin: 0 0 20px 10px;
}
a {
margin: 0 0 5px 0;
}
&#13;
答案 2 :(得分:0)
@Callum如果这符合您的要求,请您查看此代码
让我知道是否有任何改变。
function getSelected(src,target){
$( "#"+target ).val($( "#"+src ).val());
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="colors" id="first">
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
<a href="#" class="copy-times" onclick="getSelected('first','second')">Copy from above</a>
<select class="colors" id="second">
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
&#13;