Как видим, основная проблема - в поиске нужного элемента (select).
var select = BX.findChild(BX.findPreviousSibling(BX.findParent(BX("ACTION_ASSIGNED_BY_WRAPPER"), { "tagName":"td" })), { "tagName":"select" });
vs jQuery:
$('td#ACTION_ASSIGNED_BY_WRAPPER')
У меня слабо укладывается в голове архитектура. Я уже молчу про запоминание конструкции. Я уже молчу, что любой студент знает конструкции jQuery, а приучивание его к синтаксису выше - это серпом по бюджету проекта.
На самом деле, исходный битриксов селектор корректен и не "схлопывается". Он ищет элемент с тегом select в предыдущей ячейке по отношению к ячейке, в которой находится элемент с id='ACTION_ASSIGNED_BY_WRAPPER'. Поэтому на jQuery это будет выглядеть не так просто, как указано у Вас, а как-то так:
Что, конечно, приятнее чем на Битриксе, но отличается уже не так разительно. Прикольно, что многие (вначале и я) посмотрели на ваш код jQuery, мысленно перевели его в Битрикс, сравнили и подумали, что исходный не корректен. Это все ваш авторитет, Антон (или простота jQuery)
Если говорить по теме, то думаю, что там, где можно обойтись BX, то использовать его. А где напрягает, как в приведенном примере с $('div#main .sample'), подключать либо сразу весь jQuery или частями. Ну, а если действительно требуется жесткая оптимизация, то писать свои велосипеды:
function(tag,id,classname) {
var m = document.getElementById(id);
if (!m) return [];
if (m.tagName.toLowerCase()!=tag.toLowerCase()) return [];
return m.getElementsByClassName(classname);
}('div','main','sample')
Только, в общем случае, нужно за кроссбраузерностью следить, а это дорогого стоит.
Щукин Олег написал: $('#ACTION_ASSIGNED_BY_WRAPPER').parent('td').prev().children('select');
Олег, ID-к должен быть уникальным. Таким образом даже вот эта ваша конструкция схлопнется к моей (если ID уникален, но в ином случае это некорректный DOM).
Но я приводил цитату из рабочего кода, то есть у меня заработало это и в коде.
Исходный код (тот кусок, который в if($arResult['PERMS']['WRITE']){...}) знает только о div#ACTION_ASSIGNED_BY_WRAPPER (он сам его и вписывает). А функцию-обработчик он добавляет к select'у, у которого id вообще не установлен O_o. Похожий код используется не только в crm.deal.list, но и в crm.contact.list и crm.lead.list.
Вообще это жесть какая-то.
Лучше добавить id в нужный select (например, id='grid_actions_list_CRM_DEAL_LIST_V12'), тогда можно как $('#grid_actions_list_'.$arResult['GRID_ID']), так и просто BX('grid_actions_list_'.$arResult['GRID_ID']). Да и кнопке "Применить" тоже не мешало бы назначить id='grid_apply_...', на будущее. (Почему такие префиксы 'grid_actions_list_', 'grid_apply_'? Так в языковых файлах такие, только еще 'interface_' впереди.)
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».