2012-06-28 4 views
0

как правильно написать этот запрос выбора css3?как правильно написать полный селектор css3 для запросаSelectorAll

var elements = document.querySelectorAll("[data-datasource='ds1']:not(input[type='button']):not(input[type='submit']):not(input[type='submit']):not(input[type='hidden']):not(input[type='reset']):not(input[type='file']):not(input[type='image']):not(input[type='search'])"); 

Запрос выше выдает синтаксическую ошибку.

Я хочу выбрать все элементы, имеющие data-datasource = 'ds1', за исключением ввода типов кнопок, отправки, отправки, скрытия, сброса, файла, изображения и поиска.

+0

Я не знаю точно, но, возможно, придется сказать '* [data-source = blah] ', то есть перед звездочкой поставить звездочку. – Will

+0

У вас ': not (input [type = 'submit'])' дублируется в вашем селекторе. – BoltClock

+0

@Will: Звездочка не нужна. – BoltClock

ответ

1

К сожалению, CSS3's :not() selector позволяет использовать только один простой селектор за раз. Вы получаете исключение, потому что все ваши селекторы :not(input[...]) являются недопустимыми CSS3, поскольку они содержат два простых селектора: input и селектор атрибутов.

Попробуйте вместо этого:

var elements = document.querySelectorAll("[data-datasource='ds1']:not(input), input[data-datasource='ds1']:not([type='button']):not([type='submit']):not([type='hidden']):not([type='reset']):not([type='file']):not([type='image']):not([type='search'])"); 

Поскольку это все-таки очень длинная строка селектор, вот разбивка:

/* Any elements except input that have this attribute value */ 
[data-datasource='ds1']:not(input), 

/* Only inputs that have this attribute value, but not any of these types */ 
input[data-datasource='ds1']:not([type='button']):not([type='submit']):not([type='hidden']):not([type='reset']):not([type='file']):not([type='image']):not([type='search']) 
+0

Отлично !!! Я использовал первый запрос. Он работает замечательно! Я думаю, что оцифровка второго и третьего запросов и их объединение результатов будут медленнее, чем выполнение первого запроса. Таким образом, я использовал ваше первое решение. еще раз спасибо. –

+0

Второй и третий на самом деле такие же, как и первые ... просто объяснение того, как это работает. В любом случае вы можете щелкнуть галочкой слева от ответа, чтобы отметить, что он принят как способ сказать спасибо :) – BoltClock

 Смежные вопросы

  • Нет связанных вопросов^_^