jQuery - 通过它的文本获取选择选项(然后修改它)

时间:2016-09-15 15:41:04

标签: jquery html-select

我一直在使用以下代码在下拉选项中添加一些额外的文字:

jQuery("[id='product option1'] > option:contains('Notebook')").text('Notebook - OUT OF STOCK');

我必须通过它的文本获得选项,因为我的产品的1000个使用相同的下拉列表,它们各自都有自己不同的值。只是文本对所有人来说都是一样的。

这可行,但在我的下拉列表中也是Notebook Large,因此使用上面的内容会将- OUT OF STOCK添加到任何带有Notebook的选项。

我知道这是因为我在寻找contains。我可以使用什么来查找仅包含确切文本的选项?

注意:我知道这不是最佳做法,但我无法将id更改为没有空格,因此需要[id='product option1']作为选择器。

3 个答案:

答案 0 :(得分:0)

试试这个:

jQuery("[id='product option1']")
.children()
.filter(function(i,v){return v.innerText.indexOf('Notebook')>-1;})
.text('Notebook - OUT OF STOCK');

答案 1 :(得分:0)

我通常使用filter,它将一个函数作为参数,如果为true则将其添加到堆栈中,否则会跳过它,因此在这种情况下它应该类似于:

jQuery("*[id='product option1']")
    .find('option')
    .filter(function (){
          return $.trim($(this).text())=='Notebook';
    })
    .text('Notebook - OUT OF STOCK');

答案 2 :(得分:0)

没有一个答案对我有用,因为它们仍然给了我包含该文本的所有选项。 @Jamie Barker给我的链接:

jquery : How to select an option by its text?

给我正确的结果(感谢C. Hilarius博士)

代码是:

jQuery("[id='product option1'] > option:contains('Notebook')").each(function(){
    if (jQuery(this).text() == 'Notebook') {
        jQuery(this).text('Notebook - OUT OF STOCK');
        return;
    }
});