Ответ 1
Вы хотите выбрать вход, а затем взять его родительский div
:
$("input[value='hello']").parent("div").css("background", "red");
У меня есть код..
<div>
<input type="hidden" value="hello" />
</div>
<div>
<input type="hidden" value="world" />
</div>
Можно ли выбрать div со значением "hello" внутри и изменить выбранный цвет div на красный...?
$("div input[value='hello']").css("background","red"); //i have this in mind
//but i think its wrong:D
любая помощь пожалуйста.
Вы хотите выбрать вход, а затем взять его родительский div
:
$("input[value='hello']").parent("div").css("background", "red");
Как и в будущем для тех, кто сталкивается с этим вопросом, эти ответы правильны при поиске конкретного value
как атрибута, то есть одного жестко закодированного в HTML — полностью правильно по заданному вопросу. Однако, если значение поля изменяется пользователем в любой момент, атрибут value не обновляется, а только свойство значения элемента. Это приведет к неожиданному поведению в виде выбора элементов, которые фактически имеют разные текущие значения... вместо этого — или, по крайней мере, до тех пор, пока я не найду лучший способ. Я использовал следующее:
jQuery.extend(
jQuery.expr[':'],
{
/// check that a field 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)');
Который выберет все входы, содержащие "тест" в любом месте его значения.
Также поддерживаются !
not, $
заканчивается или =
равно...
Это делает:
$("div > input[value=hello]").parent().css("color", "red");
Или если по "цвету" вы действительно имели в виду "цвет фона":
$("div > input[value=hello]").parent().css("background-color", "red");
Бросив это в информационных целях.
На практике я бы использовал @BoltClock или @T.J. Crowder.
$("div:has( > input[value='hello'] )").css("background", "red");
Здесь используется has-selector
(docs), чтобы выбрать <div>
, которые имеют <input value="hello">
как прямой потомок.
Причина, по которой я предпочитаю других, объясняется довольно простыми действительными селекторами CSS, которые они используют. Это допустимая альтернатива, но, скорее всего, будет выполняться немного медленнее.
Кофе script версия @pebbl выше ответа.
##############################################################################
###
jQuery select extend
@pebbl http://stackoverflow.com/a/15031698/1271868
##############################################################################
jQuery ->
jQuery.extend(
jQuery.expr[':'],
# check that a field 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
)