jQuery соответствует нескольким атрибутам

У меня есть следующая разметка, и я хочу установить переключатель All.

<ul>
    <li><input type="radio" value="All" name="Foo"/>All</li>
    <li><input type="radio" value="New" name="Foo"/>New</li>
    <li><input type="radio" value="Removed" name="Foo"/>Removed</li>
    <li><input type="radio" value="Updated" name="Foo"/>Updated</li>
</ul>

Я хотел бы сопоставить по атрибуту, но мне нужно сопоставить 2 атрибута, @name='Foo' и @value='All'.

Что-то вроде этого:

$("input[@name='Foo' @value='all']").attr('checked','checked');

Может кто-нибудь показать, как это можно сделать?


person zadam    schedule 01.10.2008    source источник
comment
Синтаксис XPath для аргументов (с использованием @) устарел в jQuery 1.2.6 и удален из jQuery 1.3. Синтаксис CSS теперь является единственным доступным синтаксисом ([атрибут=значение]).   -  person Vincent Robert    schedule 21.04.2009


Ответы (2)


В следующем HTML-файле показано, как это можно сделать:

<html>
  <head>
    <script type="text/javascript" src="jquery-1.2.6.pack.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        $("a").click(function(event){
          $("input[name='Foo'][value='All']").attr('checked','checked');
          event.preventDefault();
        });
      });
    </script>
  </head>
  <body>
    <ul>
      <li><input type="radio"  value="All"  name="Foo"  />All</li>
      <li><input type="radio"  value="New"  name="Foo"  />New</li>
      <li><input type="radio"  value="Removed"  name="Foo"  />Removed</li>
      <li><input type="radio"  value="Updated"  name="Foo"  />Updated</li>
    </ul>
    <a href="" >Click here</a>
  </body>
</html>

При переходе по ссылке выбирается нужный переключатель. Важная строка — это установка атрибута checked.

person paxdiablo    schedule 01.10.2008
comment
Почему селектор attributeEndsWith (имя $), а не просто attributeEquals? К OP - обратите внимание, что @ перед атрибутами устарело. - person Mark Brackett; 01.10.2008
comment
@MarkBrackett - он был взят из моего похожего кода, в котором было много групп ненумерованных списков с одинаковыми именами, и я сделал все с помощью одного оператора. Я скопировал код, но не редактировал этот фрагмент, поэтому сейчас я его изменю — спасибо за предупреждение. - person paxdiablo; 01.10.2008

Я бился головой о стену, подобную этой, и просто хочу указать, что в jQuery 1.3 синтаксис, используемый в принятом ответе, является ЕДИНСТВЕННЫМ синтаксисом, который будет работать. Спрашивающий использует синтаксис @ для выражения, которое вообще не работает в jQuery. Надеюсь, это поможет следующему парню найти этот вопрос через Google = p

Чтобы было ясно, вы должны использовать

jQuery('input[name=field1][val=checked]') 

и не

jQuery('input[@name=field1][@val=checked]')
person easel    schedule 21.04.2009
comment
Спасибо - @ споткнется о неосторожном xpather вроде меня. - person StuartLC; 12.04.2012