jquery的contains如何实现精准匹配

一、背景

      博主这边的背景是,在一个JS的循环中,要通过匹配option的值来给select下拉框加上默认选中效果。这种涉及到属性匹配的,最适合的就是jquerycontains选择器了。当然,大家也可以用这个选择器来匹配html元素的其他属性,都是可以的。

关于contains:参考文档:
http://www.w3school.com.cn/jquery/selector_contains.asp

二、不精准匹配

 var option = $(formId).find("option:contains('" + sourceText + "')").prop("selected", true); 

      这里的sourceText是我自己定义的变量值。这句的意思是,对于select下拉框,如果option的值和sourceText的值一样的话,就给它加一个selected效果。

问题:这个选择器确实是能匹配到对应的元素,但是它是不精准的匹配。

比如:
sourceText = 'test';
sourceText = 'test1';
这种情况的话,test和test1都能匹配到。

三、精准匹配

网上百度一下,有很多精准匹配的方案,大致都试一下

(1) 有一种说法是加上innerHTML,亲测无效

//  var option = $(formId).find("option:contains('" + sourceText + "')[innerHTML='" + sourceText + "']").prop("selected", true);  
 //网上方案,发现没用

(2) 有一种说法是加上个冒号:

 var option = $(formId).find("option:contains(':" + sourceText + "')").prop("selected", true);   
 //网上的方案,加个:,发现没用

(3)正确方法:

 var option = $(formId).find("option:contains('" + sourceText + "')").map(function(){
       			 if ($(this).text() == sourceText) { $(this).prop("selected", true) }
   		 });

      这个方法是可以的,就是通过map在一个函数中比对属性和变量的值。如果相等则赋予选中效果。这种通过 == 来比较的方案还是比较靠谱的。博主最终也是选用了这个方案,记录一下。

end

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值