我必须获取所选选项的ID。

这种方式总是返回第一个id,它返回“ 1”:



function myFunction() {
  var skills = document.getElementById('toto');
  var skillId = skills.getAttribute('data-id');
  console.log(skillId);
}

<label>
    Skills :
    <input id="inputTest" name='skill' list='skills'>
        <datalist id='skills'>
            <select>
                 <option id="toto" data-id="1">HTML</option>
                 <option id="toto" data-id="2">Jquery</option>
                 <option id="toto" data-id="3">CSS</option>
            </select>
        </datalist>
    </label>

<button type="button" id="button1" onclick="myFunction()"> Clickhere </button>







这种方式不起作用,它返回“ null”:

<label>
Skills :
<input id="inputTest" name='skill' list='skills'>
    <datalist id='skills'>
        <select>
         <div id="toto">
            <option data-id="1">HTML</option>
            <option data-id="2">Jquery</option>
            <option data-id="3">CSS</option>
         </div>
        </select>
    </datalist>
</label>

<button type="button" id="button1" onclick="myFunction()"> Clickhere </button>

<script>
    function myFunction(){
    var skills = document.getElementById('toto');
    var skillId = skills.getAttribute('data-id');
    console.log(skillId);
    }
</script>


以下方式也不起作用:

...
<datalist id='skills'>
...
    <script>
        function myFunction(){
        var skills = document.getElementById('skills');
        var skillId = skills.getAttribute('data-id');
        console.log(skillId);
        }
    </script>


如果我将ID放在上,它也不会起作用。

getAttribute()方法是否不可避免地与<div></div>方法相同?

我只想了解正确的功能。

还有另一种没有数据列表的方法吗?因为“ Internet Explorer 9和更早版本或Safari不支持datalist标记”。

非常感谢 :)

最佳答案

您可以使用filter()map()通过匹配文本来获得选项:



function myFunction(){
  var skills = document.getElementById('inputTest');
  var allOption = [].slice.call(document.querySelectorAll('#skills option'));
  var selected = allOption.filter(o => o.textContent == skills.value).map(el => el.getAttribute('data-id'))[0];
  console.log(selected);
}

<label>
Skills :
<input id="inputTest" name='skill' list='skills'>
    <datalist id='skills'>
        <option data-id="1">HTML</option>
        <option data-id="2">Jquery</option>
        <option data-id="3">CSS</option>
    </datalist>
</label>

<button type="button" id="button1" onclick="myFunction()"> Clickhere </button>

09-25 18:06
查看更多