Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   По селекторам (https://javascript.ru/forum/jquery/74463-po-selektoram.html)

micscr 14.07.2018 13:07

По селекторам
 
Есть такие например элементы форм(могут быть и селекты и др.):

<input type="text" name="Model[field1]" value="zzz111">
<input type="text" name="Model[field2]" value="zzz222">

Мне нужно, зная только значение атрибута name, выбирать элемент.
var name = 'Model[field1]';
// 1)
//name = $.escapeSelector(name);
// 2)
alert($(':input[name="' + name + '"]').val()); //2.1
alert($('*:input[name="' + name + '"]').val()); // 2.2
alert($('[name="' + name + '"]:input').val()); // 2.3

Два вопроса:
1) Нужно ли тут экранирование? Работает и без него.
2) Какой лучше(чтобы в опенсорс внести вклад) вариант селектора выбрать? Все работают. Смысл чтобы выбрать именно элемент формы.

Aetae 14.07.2018 13:16

$('[name="' + name + '"]')
=)

micscr 14.07.2018 13:42

Если для себя, то оно все работает.
Но хотелось бы оптимально.
Думаю :input убыстрит то выборку, чем все теги на атрибуты перебирать.

Aetae 14.07.2018 17:18

Неа, на самом деле наоборот - замедлит.:)
Потому что :input - нестандартный серлектор, и jquery придётся вручную всё перебирать, в то время как просто [name] будет найден с помощью нативного вызова querySelectorAll.

Rise 14.07.2018 17:27

Цитата:

Сообщение от micscr
Думаю :input убыстрит то выборку, чем все теги на атрибуты перебирать.

На первый взгляд может показаться так, но ":input" не нативный селектор, в отличие от "[attr=value]", а jQuery расширение, точнее селекторного движка Sizzle расширение, который в jQuery используется. jQuery нам говорят, что нативные селекторы якобы дают преимущества производительности, так как могут использоваться напрямую с нативным методом querySelectorAll. Может они нас обманывают? Тогда надо копаться в Sizzle) Сам Sizzle можно вообще вырезать и останется только нативный querySelectorAll, так что разработчики jQuery тоже не дремлют, и библиотека еще будет долго актуальна)

рони 14.07.2018 17:48

:-?
$('селектор_родителя [name="' + name + '"]')

ruslan_mart 15.07.2018 04:51

Можно без селектора, через более быстрые методы.

var element = document.getElementsByTagName(name)[0];


var element = myForm.elements[name];

micscr 16.07.2018 14:13

оставлю тогда чисто по атрибуту


Часовой пояс GMT +3, время: 11:55.