javascript - 我如何在不使用 JavaScript 的情况下使用 JQuery 库来重写它?

标签 javascript jquery html jquery-selectors css-selectors

我在 JQuery 中有几行代码:

     var central = $('#townid option:contains("Central")');
     if (central.length){
        central.insertAfter('select option:first-child');
     }

如何在不使用 JQuery 库的情况下仅通过 JavaScript 重写它?

最佳答案

正确的翻译应该是这样的:

var selects = document.getElementsByTagName('select'),
    options = document.getElementById('townid').getElementsByTagName('option'),
    options = Array.prototype.slice.call(options), //2 lines only for readability
    tmp = document.createDocumentFragment();

for(var i = 0, l = options.length; i < l; i++) {
    var option = options[i],
        text = option.innerText || option.textContent;
    if(text.indexOf('Central') > -1) {
        tmp.appendChild(option);
    }
}

for(var i = 0, l = selects.length; i < l; i++) {
    var select = selects[i],
         opts = select.getElementsByTagName('option');
    if(opts.length > 1) {
        select.insertBefore(tmp.cloneNode(true), opts[1]);
    }
    else {
        select.appendChild(tmp.cloneNode(true));
    }
}

DEMO

这可以根据标记大大简化(并根据浏览器进行优化(例如支持querySelectorAll))。例如。如果您知道总是只有 一个 选项包含“Central”,以及是否只存在一个 select 元素。

这里是一个 select 元素的精简版本,已知列表大小(即 > 1),只有一个选项包含 Central。所以基本上只是重新排序选项:

var options = document.getElementById('townid').getElementsByTagName('option');

for (var i = 0, l = options.length; i < l; i++) {
    var option = options[i],
        text = option.innerText || option.textContent;
    if (text.indexOf('Central') > -1) {
        if (i > 1) {
            option.parentNode.insertBefore(option, options[1]);
        }
        break;
    }
}

DEMO

更新:

如果选项的文本应该正好是 Central,则正常比较文本:

if(text === 'Central')

关于javascript - 我如何在不使用 JavaScript 的情况下使用 JQuery 库来重写它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5219547/

相关文章:

javascript - jquery中的触发事件和绑定(bind)

html - 为不同的屏幕尺寸禁用悬停

javascript - 页面下拉菜单中所选项目的总和

javascript - 使用 Greasemonkey(或类似的用户脚本引擎)可以更快地重定向?

javascript - 当我更新列表作为其依赖项时,React useEffect 有时不会触发

jquery - 无法根据按钮的类别选择按钮

对象内的 Javascript 回调

php - mysql_query 结果在第二篇文章中可用吗?

javascript - 如何使用javascript变量显示图像

php - 如果 int 具有特定值,则执行某些操作,如果没有,则执行其他操作