jquery选择器用于输入值

时间:2011-02-20 22:50:39

标签: jquery input jquery-selectors

我这里有代码..

 <div>
    <input type="hidden" value="hello" />
 </div>

 <div>
    <input type="hidden" value="world" />
 </div>

是否可以在内部选择值为“hello”的div并将所选div的颜色更改为红色......?

 $("div input[value='hello']").css("background","red"); //i have this in mind
                                                        //but i think its wrong:D

任何帮助请...

5 个答案:

答案 0 :(得分:44)

您想要选择输入,然后选择其父div

$("input[value='hello']").parent("div").css("background", "red");

答案 1 :(得分:39)

正如对于遇到此问题的人的未来说明一样,这些答案在搜索特定value作为属性时是正确的,即HTML中的硬编码 - 根据问题完全正确。但是,如果用户在任何时候更改了字段的值,则 attribute 值不会更新,只会更新元素的值 property 。这将导致意外行为,选择实际上具有不同当前值的元素...而不是 - 或者至少在我找到更好的方式之前 - 我一直在使用以下内容:

jQuery.extend(
  jQuery.expr[':'],
  {
    /// check that a field's value property has a particular value
    'field-value': function (el, indx, args) {
      var a, v = $(el).val();
      if ( (a = args[3]) ) {
        switch ( a.charAt(0) ) {
          /// begins with
          case '^':
            return v.substring(0,a.length-1) == a.substring(1,a.length);
          break;
          /// ends with
          case '$':
            return v.substr(v.length-a.length-1,v.length) == 
              a.substring(1,a.length);
          break;
          /// contains
          case '*': return v.indexOf(a.substring(1,a.length)) != -1; break;
          /// equals
          case '=': return v == a.substring(1,a.length); break;
          /// not equals
          case '!': return v != a.substring(1,a.length); break;
          /// equals
          default: return v == a; break;
        }
      }
      else {
        return !!v;
      }
    }
  }
);

上面创建了一个新的jQuery伪选择器,可以这样使用:

$('input:field-value(^test)');

将选择以值“test”开头的所有输入,或者:

$('input:field-value(*test)');

将在其值的任何位置选择包含“test”的所有输入。

还支持!不是,$结束或=等于...

答案 2 :(得分:4)

这样做:

$("div > input[value=hello]").parent().css("color", "red");

Live example

或者如果用“颜色”你真的是指“背景颜色”:

$("div > input[value=hello]").parent().css("background-color", "red");

Live example

答案 3 :(得分:2)

将其扔出去以供参考。

在实践中,我会使用@BoltClock's@T.J. Crowder's解决方案。

$("div:has( > input[value='hello'] )").css("background", "red");

这使用has-selector(docs)选择<div>作为直接后代的<input value="hello">元素。

我更喜欢其他的原因是因为他们使用了相当简单的有效CSS选择器。这是一个有效的替代方案,但可能会慢一些。

答案 4 :(得分:2)

@pebbl的咖啡脚本版本以上答案。

##############################################################################
###
    jQuery select extend 
    @pebbl http://stackoverflow.com/a/15031698/1271868
##############################################################################
jQuery ->
  jQuery.extend(
    jQuery.expr[':'],
    # check that a field's value property has a particular value
    'field-value': (el, indx, args) ->
      v = $(el).val()
      if (a = args[3])
        switch a.charAt(0)
          # begins with
          when '^' then return v.substring(0, a.length-1) is
            a.substring(1, a.length)
          # ends with
          when '$' then return v.substr(v.length-a.length-1, v.length) is 
            a.substring(1, a.length)
          # contains
          when '*' then return v.indexOf(a.substring(1, a.length)) isnt -1 
          # equals
          when '=' then return v is a.substring(1, a.length) 
          # not equals
          when '!' then return v isnt a.substring(1, a.length) 
          # equals
          else return v is a 
      else
        return !!v
  )