如何修改选定的选项文本&在下一个选项之后恢复文本
How to Modify selected option text & Restore Back text after next option
我想使用jQuery修改动态生成的下拉列表的文本内容。下面是我的例子:
下拉文本如下:
<select id="s1">
<option data-name="volvo" value="1">1:Volvo</option>
<option data-name="saab" value="2">2:Saab</option>
<option data-name="mercedes" value="3">3:Mercedes</option>
<option data-name="audi" value="4">4:Audi</option>
<option data-name="BMW" value="11">11:BMW</option>
</select>
jQuery: var previous;
$('#s1').focus(function () {
// Store the current value on focus, before it changes
previous = this.value;
}).change(function() {
//Modify the SelectedOption Display only Number Value
$('#s1').find(':selected').text($('#s1').find(':selected').val());
//Restore the Previous Option : Format 'Number Value : data-name'
alert($("#s1 option[value='"+previous+"']").val());
alert($("#s1 option[value='"+previous+"']").attr('data-name'));
$("#s1 option[value='"+previous+"']").text($("#s1 option[value='"+previous+"']").val() +' '+ $("#s1 option[value='"+previous+"']").attr('data-name'));
});
我还使用了以下属性:
-
value
:存储该车的编号值 -
data-name
:存储该车的名称
alert
,但我想做到这一点,而不使用alert
,然后它不工作。
下面是我的代码:jsfiddle请帮助。 您已经设置了data-name
和value
属性,因此您可以轻松地遍历option
属性并使用这些属性来更新文本:
$('#s1').change(function() {
$(this).find('option').each(function(){
$(this).text(
$(this).attr('value')+( $(this).is(':selected') ? '' : ':'+$(this).attr('data-name'))
);
});
});
$('#s1').change(function() {
$(this).find('option').each(function(){
$(this).text(
$(this).attr('value')+( $(this).is(':selected') ? '' : ':'+$(this).attr('data-name'))
);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="s1">
<option data-name="volvo" value="1">1:Volvo</option>
<option data-name="saab" value="2">2:Saab</option>
<option data-name="mercedes" value="3">3:Mercedes</option>
<option data-name="audi" value="4">4:Audi</option>
<option data-name="BMW" value="11">11:BMW</option>
</select>
编辑
(评论)我想说的是,对于正常的使用,上面的代码不会对用户体验产生影响。在数学(?)意义上,它会更慢——执行时间上的差异可以忽略,因为DOM在$.each()
循环中被修改(每个<option>
都被更新),这不是最好的主意。但是没有什么usar能注意到的。
对于OP的例子,其中只涉及5个选项,更新所有选项与只更新2个是有争议的,在速度上不会有任何区别。如果有数百个选项,那么(说到用户体验)作为用户,我不会很高兴有这么多的选项要通过,搜索我需要的那个。所以主要问题就在那里。
但是,如果对上述脚本速度有任何担忧,还有另一种(更好的?)方法,不使用全局标志和循环。它创建一个临时的data-last
属性,用于标识之前选择的<option>
,并且一次只修改两个选项:
$('#s1').change(function() {
$(this).find('option:selected').attr('data-last','Yes').text(this.value)
.siblings('[data-last]').removeAttr('data-last').text(function(){
return this.value+':'+$(this).attr('data-name');
});
});
$('#s1').change(function() {
$(this).find('option:selected').attr('data-last','Yes').text(this.value)
.siblings('[data-last]').removeAttr('data-last').text(function(){
return this.value+':'+$(this).attr('data-name');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="s1">
<option data-name="volvo" value="1">1:Volvo</option>
<option data-name="saab" value="2">2:Saab</option>
<option data-name="mercedes" value="3">3:Mercedes</option>
<option data-name="audi" value="4">4:Audi</option>
<option data-name="BMW" value="11">11:BMW</option>
</select>
这两种方法之间的速度比较(200个选项):
JSFiddle
相关文章:
- 如何在从多选下拉列表中选择选项值时动态生成文本框
- 根据选项卡内部的文本链接中的哈希ID动态选择jqueryUI选项卡
- 使用基于文本的 Jquery 选择选项
- 当选择值x时,Javascript需要在正确的位置显示文本区域,从而循环通过具有选择选项的表单
- 将输入文本与某个选项的值相匹配并自动选择
- 或者在表单上选择默认选项文本(选择1)
- 文本链接可更改引导程序选项卡
- 选择“选择选项”时显示文本.怎么做
- HTML-从mysql生成的选择框中的一个选项更改文本区域的颜色
- 禁用/启用基于单选/选择选项所选Javascript的文本框
- 单击select'时将数组行回显到文本区域中;s选项
- 在AngularJS Dropdownlost中设置默认文本选项
- 在ractive.js中获取所选选项文本
- 如何使用 jQuery 从 AJAX 生成的选择下拉列表中获取文本选项
- 发送所有文本选项在选择与请求
- 带有文本选项的单选按钮列表 蛋糕
- jquery设置php生成的文本选项列表
- jQuery警告文本选项从选择标签
- 向Ext.TabPanel添加不可选择的文本选项卡
- 如何添加其他(输入文本选项)在一个javascript测验页面