检索选择元素的文本

Posted

技术标签:

【中文标题】检索选择元素的文本【英文标题】:Retrieving text of select element 【发布时间】:2015-08-05 07:41:48 【问题描述】:

当使用 vue.js 的 v-model 绑定 <select> 元素时,您将如何获取选定的选项文本而不是选定的选项值?

html 中:

<select v-model="selected" options="myOptions"></select>

在 JS 中:

myOptions: [ text: 'Blue', value: '1' ,  text: 'Green', value: '2' ]

我想要通过执行 selected.text selected.value 之类的操作来检索文本“Blue”以及值“1”。但是,您只能执行 selected ,默认返回所选值。

参考:Vue.js guide for Dynamic Select Options

【问题讨论】:

我现在遇到了完全相同的问题。该文档似乎暗示您可以通过text 获取您所描述的方式,但这对我也不起作用。 根据 Even You 的说法,这还没有内置到 vue.js 中:github.com/vuejs/Discussion/issues/163#issuecomment-104966694 【参考方案1】:

你可以只使用一个过滤器,像这样:

html:

<div id='vm'>
    Formatted value:<b> city | cityFormatter </b><br/>
    <br/>
    <select v-model="city" options="cities"></select>
</div>

js:

var vm = new Vue(
  el: '#vm',
  data: 
      city: 'city1',
      cities: [text: 'Toronto', value: 'city1', 
               text: 'Orleans', value: 'city2']
  ,
  filters: 
      cityFormatter: function(val) 
          var newVal = '';
          this.cities.map(function(el) 
              if (val == el.value)
                  newVal = el.value + ' ' + el.text;
              
          );
          return newVal;
      
  
);

工作示例: http://jsfiddle.net/qfy6s9Lj/9/

【讨论】:

【参考方案2】:

其实你可以试试结合jquery或者只是原生js代码

jQuery 的解决方案

html:

<div id='example'>
     <select v-model="selected" options="myOptions"></select>
</div>

js:

var vm = new Vue(
  el: '#example',
  data: 
      ...
  ,
   computed: 
        selectedtext:  
            cache: false,
            //get selectedtext by jquery
            get: function() return $(this.$el).find(":selected").text();
        
    ,
);

没有jquery的解决方案

html:

<div id='example'>
     <select ref="ddl" v-model="selected" options="myOptions"></select>
</div>

js:

var vm = new Vue(
  el: '#example',
  data: 
      ...
  ,
   computed: 
        selectedtext:  
            cache: false,
            //get selectedtext directly
            get: function() 
                 var ddl = this.$refs.ddl;
                 return ddl.options[ddl.selectedIndex].text;
            
        
    ,
);

此外,您还可以创建一个逻辑复用组件,达到通过 selected.text 或 selected.value 访问所选值的目的。

【讨论】:

我们仍然需要从选定的选项中获取文本吗?我使用 vue 作为 jquery 的替代品。真的很糟糕:( 我认为你可以用原生 javascript 代码替换 jquery 代码。这取决于你选择什么。此外,我认为还有其他解决方案。【参考方案3】:

Vue 2+ 的答案

我有兴趣遇到这个问题,因为我目前正在评估 Vue 和 React,并研究获取当前选择的相对容易程度(不仅仅是下拉菜单,而是一般的 UI)。

我发现,自 2015 年 5 月至 2015 年 7 月发布这些帖子以来,情况发生了很大变化,当时 Vue 的最新版本是 0.12。 @swift 的答案中的 JSFiddle 今天仍然有效,因为它引入了 Vue 0.12。

使用今天的 Vue,目前是 2.6 版,我找到了一个与今天面临同样问题的人相关的解决方案。有趣的是,使用 2.6,讨论中的标记甚至不会达到初始化选项的程度:

<select v-model="selected" options="myOptions"></select>

在深入研究之后,我发现虽然optionsselect 元素的有效HTML DOM 属性,因此可以从JavaScript 访问,但似乎Vue 不再支持像这样在标记中初始化它。相反,我们添加了传统的 HTML option 元素。每https://vuejs.org/v2/guide/forms.html:

<select v-model="selected">
  <option disabled value="">Please select one</option>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
<span>Selected:  selected </span>

乍一看,这种变化似乎是倒退了一步。但事实上,记住我们可以使用v-forv-bind,我认为这让事情变得更加灵活。为了说明我为什么这么认为,我将首先展示在同一链接页面上给出的示例:

HTML

<select v-model="selected">
  <option v-for="option in options" v-bind:value="option.value">
     option.text 
  </option>
</select>

<span>Selected:  selected </span>

JS

new Vue(
  el: '...',
  data: 
    selected: 'A',
    options: [
       text: 'One', value: 'A' ,
           text: 'Two', value: 'B' ,
           text: 'Three', value: 'C' 
        ]
      
    )

在 HTML 中可以看到,这将下拉列表的选定值绑定到 Vue 实例的 selected 属性(使用 v-model="selected"),将单个选项值绑定到每个选项的 value(使用 @ 987654334@),最后将各个选项文本绑定到将要显示的文本(使用 option.text )。

selected 绑定到不同的选项属性只是进一步的一小步,可以是文本、id 或选项对象可能具有的任何属性,或者——这就是事情——绑定到选项对象本身。能够将选项本身作为选定值访问意味着我们可以访问它的所有属性,而不仅仅是我们选择绑定到的属性:

HTML

<div id='vm'>
    <select id="ddl1" v-model="ddl1selecteditem">
        <option v-for="option in options1" v-bind:value="option">
             option.txt 
        </option>
    </select>
    <span>selected item: text=' ddl1selecteditem.txt ', id= ddl1selecteditem.id </span>
</div> 

JS

var vm = new Vue(
  el: '#vm',
  data: 
    options1: [
       txt: 'One', id: 1 ,
       txt: 'Two', id: 2 ,
       txt: 'Three', id: 3
    ],
    ddl1selecteditem: 
    
);

vm.ddl1selecteditem = vm.options1[0];

【讨论】:

以上是关于检索选择元素的文本的主要内容,如果未能解决你的问题,请参考以下文章

从 CListCtrl 检索当前列表项文本的问题

确定当前文本选择包含哪些 DOM 元素

Chrome(webkit)中浮动元素中的用户文本选择选择更多文本[关闭]

选择元素中的文本

使用css选择器从元素中获取文本,不包括嵌套元素内的文本

选择内部 flex 元素时,文本选择背景在 Safari 中变得不可见