代码之家  ›  专栏  ›  技术社区  ›  SeekLoad

如何在两个选定元素之间切换选定值

  •  -2
  • SeekLoad  · 技术社区  · 8 年前

    select 包含相同信息的html元素。

    为了方便用户,我想提供将源语言切换到目标语言的可能性,反之亦然。

    <select name="LangA">
        <option value="en">English</option>
        <option value="es">Spanish</option>
        <option value="sv">Swedish</option>
        <option value="tr">Turkish</option>
        <option value="uk">Ukrainian</option>
    </select>
    
    <select name="LangB">
        <option value="en">English</option>
        <option value="es">Spanish</option>
        <option value="sv">Swedish</option>
        <option value="tr">Turkish</option>
        <option value="uk">Ukrainian</option>
    </select>
    

    两种语言都相同 选择

    原因是这些框用于翻译文本区域。整个代码要大得多,语言也要多,为了保持简短,我只提取了需要的代码。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Icepickle    8 年前

    假设两种语言都相同,只需将选择从一个框更改为另一个框。该脚本将在两个“选择”下拉列表中读取当前选定值,然后在单击“交换”时在另一个下拉列表中搜索该选项。

    function swapBySelectedIndex( selector1, selector2 ) {
      // get both elements and save the selectedIndex of the first element
      var elem1 = document.querySelector(selector1),
          elem2 = document.querySelector(selector2),
          selectedOption1 = elem1.selectedIndex;
    
      // set the first element to the second elements selectedIndex
      elem1.selectedIndex = elem2.selectedIndex;
      // set the second elements' selectedIndex to the saved index
      elem2.selectedIndex = selectedOption1;
    }
    

    function getSelectedOption( elem ) {
      return elem.options[elem.selectedIndex].value;
    }
    
    function setSelectedOption( elem, value ) {
      for (let i = 0; i < elem.options.length; i++) {
        elem.options[i].selected = value === elem.options[i].value;
      }
    }
    
    function swapByOptionValue( selector1, selector2 ) {
      var elem1 = document.querySelector(selector1),
          elem2 = document.querySelector(selector2),
          selectedOption1 = getSelectedOption( elem1 ),
          selectedOption2 = getSelectedOption( elem2 );
      setSelectedOption( elem1, selectedOption2 );
      setSelectedOption( elem2, selectedOption1 );
    }
    
    function swapBySelectedIndex( selector1, selector2 ) {
      var elem1 = document.querySelector(selector1),
          elem2 = document.querySelector(selector2),
          selectedOption1 = elem1.selectedIndex;
          
      elem1.selectedIndex = elem2.selectedIndex;
      elem2.selectedIndex = selectedOption1;
    }
    <select name="LangA">
    <option value="en">English</option>
    <option value="es">Spanish</option>
    <option value="sv">Swedish</option>
    <option value="tr">Turkish</option>
    <option value="uk">Ukrainian</option>
    </select>
    
    <select name="LangB">
    <option value="en">English</option>
    <option value="es">Spanish</option>
    <option value="sv">Swedish</option>
    <option value="tr">Turkish</option>
    <option value="uk">Ukrainian</option>
    </select>
    
    <button type="button" onClick="swapByOptionValue('select[name=\'LangA\']', 'select[name=\'LangB\']')">Swap selected languages</button>
    
    <button type="button" onClick="swapBySelectedIndex('select[name=\'LangA\']', 'select[name=\'LangB\']')">Swap selected languages (using selectedIndex)</button>