关于jquery的选择器问题

天地的星空 发布于 2013/12/16 17:10
阅读 171
收藏 1

<input id="test"  type="text" value="a">


 当value有初始值a的时候,当我改变了初始值变成b,$(input[type=text][value=b]) 这个无法选择出来,当我在这之前执行这个 $("#test").attr("value", "b") 后在使用$(input[type=text][value=b]) 这个就可以选择,我猜测是juqery对dom元素做了缓存导致的,如何解决这个问题??

以下是问题补充:

@天地的星空:$('input[type=text][value=b]') (2013/12/16 17:11)
加载中
0
纠结名字

http://www.cnblogs.com/newsea/archive/2012/09/10/2679266.html

先看下上面那个文章的内容,基本是没有问题的。看完之后,明确以下两点:

1、$(input[type=text][value=b]),这里是要选择属性value为b的,等同于dom.getAttribute('value') == 'b',不是dom.value == 'b'的,因此,你所谓的改变a为b,有两种可能,一是手动输入,此时改变了的是dom.value,不是setAttribute改变为b的,所以dom.getAttribute('value')得到的还是a,另一个中是使用了jq的val函数,这个在底层也是使用dom.value实现的。

2、$("#test").attr("value", "b") ,这个attr显然是setAttribute,所以用这种方式改变a为b,能够使用第一条中的语句获取到该节点。


解决办法:

var $doms = $(':text').filter(function(){return $(this).val() == 'b';});

0
java_speed
java_speed
你都有id,居然还搞那么麻烦(不是有缓存,可以改变过后,你的选择事件没监听到)
天地的星空
天地的星空
这个是测试的 原本的没有id
0
天地的星空
天地的星空
<input id="test" type="text" value="a"/>
  <button id="demo">测试</button>
  <script type="text/javascript">
	$("#demo").click(function(){
		var value = $("#test").val();
	//	$("#test").attr("value", value);加上这个就好了, jquery的缓存吗 如何解决这个问题???
		alert($("input[type=text][value="+value+"]").length);
	});
	</script>



0
淘淘我的小宝宝
淘淘我的小宝宝
这写法效率太低了,办法多的是
天地的星空
天地的星空
啥办法?
0
yuetingqian
yuetingqian
你手工输入的时候value并没有改变
0
yuetingqian
yuetingqian
比如你可以拿button前一个input 这样就避免value了
天地的星空
天地的星空
这个只是demo 本来这里是动态的多个input 要去某个输入的值得input,所以不能这样做
0
d
dever2011
可以不用这样写啊,换一种
天地的星空
天地的星空
咋写啊
0
开源无憾
开源无憾
js的业务流程都是由事件驱动的,你应该用一个value值改变的监听事件来驱动jquey选择器进行第二次选择。
0
开源无憾
开源无憾
jquery的选择器只有在文档模型渲染(渲染的具体原理请自行谷歌)完成事件被触发以后才能正常工作,你通过$(selector).attr('value','b')的操作事实上是“通知jquery选择器,文档模型发生了改变”,选择器这时才能继续工作
返回顶部
顶部