【问题标题】:jQuery select and filter contents of <option>jQuery 选择和过滤 <option> 的内容
【发布时间】:2009-12-20 16:05:32
【问题描述】:

我有以下下拉菜单:

<select id="target">
    <option value="0">Zero ($123.45)</option>
    <option value="1">One ($99.99)</option>
    <option value="2">Two ($4.50)</option>
</select>

使用 jQuery,如何选择所选选项的 () 括号的内容,即 123.4599.994.50

到目前为止我有:

$("select#target option:selected").contents();

这只是给出Zero ($123.45) 或等效的。如何进一步过滤以获得我要查找的号码?

提前致谢。

【问题讨论】:

  • 带正则表达式!耶!

标签: jquery filter css-selectors


【解决方案1】:

试试:

var a = $("select#target option:selected").contents();
var bracketed = a.replace(/\(([^)]*)\)/g, "$1");

或者,如果您不想使用正则表达式:

var a = $("select#target option:selected").contents();
var bracketed = a.split('(')[1].split(')')[0];

【讨论】:

    【解决方案2】:

    您也可以只使用这些美元值作为每个值的属性:

    <option value="$123.45">Zero ($123.45)</option>
        etc...
    

    然后使用这个 jQuery 来获取它:

    var a = $('select#target option:selected').attr('value');
    

    【讨论】:

    • 我喜欢这个建议。解析文本有效,但在发生变化的情况下似乎不太灵活(除非用你的正则表达式测试变体)。我可能会建议使用 priceXXXXX-XX 类并对其进行解析,因为可以更具体地定义该类,并且可能不会像文本那样更改。
    【解决方案3】:

    我认为使用 jQuery 最惯用的方法是

    $("#target :selected").text().match(/\((.+)\)/).pop()
    

    正则表达式通常是 Javascript 中匹配文本的最佳方式,而且这种代码风格符合通常的 jQuery 方法链接风格,不引入任何多余的局部变量,也不包含丑陋的索引解引用操作。我还以更紧凑的形式编写了选择器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2011-10-23
      • 2010-11-14
      相关资源
      最近更新 更多