使用 Jquery 从多个 select 选项获取自定义属性值
Get custom attribute value from multiple select option using Jquery
我想从多个select获取自定义属性值,这是我的html,代码
<select multiple name="tax[]" id="tax_classes" onChange="getSelectedOptions(this)">
<option value="2" data-percentage="9.00">CGST(9.00%)</option>
<option value="1" data-percentage="18.00">GST(18.00%)</option>
<option value="3" data-percentage="9.00">IGST(9.00%)</option>
<option value="4" data-percentage="12.00">Tax(12.00%)</option>
</select>
从上面的标签中,我想获得 data-percentage
属性值。
这是我到目前为止尝试过的脚本
function getSelectedOptions(tax)
{
var options = [], option;
var len = tax.options.length;
for (var i = 0; i < len; i++) {
option = tax.options[i];
if (option.selected) {
options.push(option);
alert(option.value);
}
}
}
我得到的输出为 2,1,3
、
但我的预期输出是
9.00, 18.00, 9.00
。
你说你想获取属性值,但你记录的是.value
,它指的是value
属性。您需要改用 getAttribute('data-percentage')
。
function getSelectedOptions() {
var options = [],
option;
var tax = document.getElementById('tax_classes');
var len = tax.options.length;
console.clear();
for (var i = 0; i < len; i++) {
option = tax.options[i];
if (option.selected) {
options.push(option);
console.log(option.getAttribute('data-percentage'));
}
}
}
window.addEventListener('DOMContentLoaded', getSelectedOptions);
<select multiple name="tax[]" id="tax_classes" onChange="getSelectedOptions()">
<option value="2" data-percentage="9.00">CGST(9.00%)</option>
<option value="1" data-percentage="18.00" selected>GST(18.00%)</option>
<option value="3" data-percentage="9.00">IGST(9.00%)</option>
<option value="4" data-percentage="12.00" selected>Tax(12.00%)</option>
</select>
构建所选 option
元素的 data
属性数组的最简单方法是使用 map()
。
另请注意,内联事件处理程序不被视为最佳实践;您应该改用不显眼的事件处理程序。由于您已经在页面中包含了 jQuery,下面是一个如何做到这一点的示例:
$('#tax_classes').on('change', function() {
var options = $(this).find('option:selected').map(function() {
return $(this).data('percentage');
}).get();
console.log(options);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select multiple name="tax[]" id="tax_classes">
<option value="2" data-percentage="9.00">CGST(9.00%)</option>
<option value="1" data-percentage="18.00">GST(18.00%)</option>
<option value="3" data-percentage="9.00">IGST(9.00%)</option>
<option value="4" data-percentage="12.00">Tax(12.00%)</option>
</select>
如果您想坚持使用纯 JS,请按以下步骤操作:
document.querySelector('#tax_classes').addEventListener('change', function() {
var options = Array.from(this.options).filter(o => o.selected).map(o => o.dataset.percentage);
console.log(options);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select multiple name="tax[]" id="tax_classes">
<option value="2" data-percentage="9.00">CGST(9.00%)</option>
<option value="1" data-percentage="18.00">GST(18.00%)</option>
<option value="3" data-percentage="9.00">IGST(9.00%)</option>
<option value="4" data-percentage="12.00">Tax(12.00%)</option>
</select>
我想从多个select获取自定义属性值,这是我的html,代码
<select multiple name="tax[]" id="tax_classes" onChange="getSelectedOptions(this)">
<option value="2" data-percentage="9.00">CGST(9.00%)</option>
<option value="1" data-percentage="18.00">GST(18.00%)</option>
<option value="3" data-percentage="9.00">IGST(9.00%)</option>
<option value="4" data-percentage="12.00">Tax(12.00%)</option>
</select>
从上面的标签中,我想获得 data-percentage
属性值。
这是我到目前为止尝试过的脚本
function getSelectedOptions(tax)
{
var options = [], option;
var len = tax.options.length;
for (var i = 0; i < len; i++) {
option = tax.options[i];
if (option.selected) {
options.push(option);
alert(option.value);
}
}
}
我得到的输出为 2,1,3
、
但我的预期输出是
9.00, 18.00, 9.00
。
你说你想获取属性值,但你记录的是.value
,它指的是value
属性。您需要改用 getAttribute('data-percentage')
。
function getSelectedOptions() {
var options = [],
option;
var tax = document.getElementById('tax_classes');
var len = tax.options.length;
console.clear();
for (var i = 0; i < len; i++) {
option = tax.options[i];
if (option.selected) {
options.push(option);
console.log(option.getAttribute('data-percentage'));
}
}
}
window.addEventListener('DOMContentLoaded', getSelectedOptions);
<select multiple name="tax[]" id="tax_classes" onChange="getSelectedOptions()">
<option value="2" data-percentage="9.00">CGST(9.00%)</option>
<option value="1" data-percentage="18.00" selected>GST(18.00%)</option>
<option value="3" data-percentage="9.00">IGST(9.00%)</option>
<option value="4" data-percentage="12.00" selected>Tax(12.00%)</option>
</select>
构建所选 option
元素的 data
属性数组的最简单方法是使用 map()
。
另请注意,内联事件处理程序不被视为最佳实践;您应该改用不显眼的事件处理程序。由于您已经在页面中包含了 jQuery,下面是一个如何做到这一点的示例:
$('#tax_classes').on('change', function() {
var options = $(this).find('option:selected').map(function() {
return $(this).data('percentage');
}).get();
console.log(options);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select multiple name="tax[]" id="tax_classes">
<option value="2" data-percentage="9.00">CGST(9.00%)</option>
<option value="1" data-percentage="18.00">GST(18.00%)</option>
<option value="3" data-percentage="9.00">IGST(9.00%)</option>
<option value="4" data-percentage="12.00">Tax(12.00%)</option>
</select>
如果您想坚持使用纯 JS,请按以下步骤操作:
document.querySelector('#tax_classes').addEventListener('change', function() {
var options = Array.from(this.options).filter(o => o.selected).map(o => o.dataset.percentage);
console.log(options);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select multiple name="tax[]" id="tax_classes">
<option value="2" data-percentage="9.00">CGST(9.00%)</option>
<option value="1" data-percentage="18.00">GST(18.00%)</option>
<option value="3" data-percentage="9.00">IGST(9.00%)</option>
<option value="4" data-percentage="12.00">Tax(12.00%)</option>
</select>