.click() по элементам
Почему не работает .click() на элементе. Пробегаюсь по списку через цикл, нахожу нужный, ставлю ему click, но сам клик не срабатывает. Через debugger и напрямую (без цикла) все отлично работает
|
Nikolay37,
где код? |
Цитата:
let baseName = "apple,pineapple,translate".split(',') let i=0 let n=0 start() function start(){ for(i;i<document.getElementsByClassName('name').length;i++){ if(document.getElementsByClassName('name')[i].innerText == baseName[n]){ document.getElementsByClassName('name')[i].click() } if(n < baseName.length -1){ i=0 n++ start() } } } |
Nikolay37, пример нужен полный, с хтмэлем...
|
Цитата:
|
Цитата:
Цитата:
|
Nikolay37, пока не понятно зачем применяется рекурсивный вызов функции вместо обычного цикла...
Так же трижды используется document.getElementsByClassName('name') |
:-? start плохое имя для функции, может переименовать
|
Цитата:
Текущий код будет проверять только первый элемент выборки на соответствие его контента значению эл. массива basename. Попробуйте так: let baseName = "apple,pineapple,translate".split(',') let i = 0 let n = 0 let nodes = document.getElementsByClassName('name'); console.log('Найдено элементов: ' + nodes.length); start() function start() { for (i; i < nodes.length; i++) { console.log(nodes[i].innerText + ' == ' + baseName[n] + ' -> ' + (nodes[i].innerText == baseName[n] ? 'true' : 'false')); if (nodes[i].innerText == baseName[n]) { console.log('CLICK'); nodes[i].click(); break; //Если нужно кликнуть только по одному элементу } } if (n < baseName.length - 1) { i = 0 n++ console.log('Restart'); start() } } |
Цитата:
"Так же трижды используется" document.getElementsByClassName('name')[/quote] Ну я могу в целом это в переменную записать, смысл не изменится |
Цитата:
|
Цитата:
|
Цитата:
Кстати прошу заметить, ваш код тоже не работает, если убрать оттуда break |
Цитата:
let baseName = "apple,pineapple,translate".split(',') let i = 0 let n = 0 function start() { for (i; i < document.getElementsByClassName('name').length; i++) { if (document.getElementsByClassName('name')[i].innerText == baseName[n]) { document.getElementsByClassName('name')[i].click() } if (n < baseName.length - 1) { i = 0 n++ start() } } } Что тут хорошего? Вы пытаетесь в 6-й строке пробежаться по всем элементам с классом "name", но сразу же в конце первой итерации вызываете эту функцию вновь сбрасывая счетчик "i" и инкрементируя значение "n". Т.е. при втором вызове этой функции проверяться будет снова первый элемент с классом "name", но уже искомое значение будет другим. После того, как счетчик "n" превысит baseName.length продолжат выполняться предыдущие циклы. Они будут проверять соответствие контента элементов (начиная со второго и до конца) с классом "name", но т.к. n==baseName.length, то искать циклы будут элемент, чей контент равен null. Т.е. условие для элементов с индексом > 1 никогда не выполнится, поскольку строка никогда не будет равна null (равна !== эквивалентна). Upd. [][1]===undefined, т.е. в тексте выше "null" читайте как "undefined", но сути не меняет. |
Цитата:
Пофиксить баг труда не составит. |
Цитата:
let baseName = "apple,pineapple,translate".split(',') let i = 0 let n = 0 function start() { for (i; i < document.getElementsByClassName('name').length; i++) { if (document.getElementsByClassName('name')[i].innerText == baseName[n]) { document.getElementsByClassName('name')[i].click() } } if (n < baseName.length - 1) { i = 0 n++ start() } } Если открыть debugger в начале исполнения фун-и, то она работает хорошо и клик по элементу срабатывает |
Цитата:
|
Цитата:
|
Цитата:
<div id="items"> <div class="scrollbar"> <div class="item" data-error="" data-bot_id="37" data-price="5336" data-asset_id="12677286778" data-market_hash_name="M4A1-S | Cyrex (Field-Tested)" data-name="m4a1-s | cyrex (field-tested)"> <a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12677286778D13862166415325500362" class="btn-inspect">Inspect</a><span class="price">5,336</span> <div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpou-6kejhz2v_Nfz5H_uO1gb-Gw_alIITSj3lU8Pp8j-3I4IG721Hh_UM_YmilJY7DegI4Nw7Y8we4wO-9hJG76pzImHsy7ygh7HyMnAv330-QA3A95Q"/></div> <span class="name">M4A1-S | Cyrex (Field-Tested)</span> </div> <div class="item" data-error="" data-bot_id="37" data-price="26460" data-asset_id="12677286746" data-market_hash_name="AK-47 | Fuel Injector (Well-Worn)" data-name="ak-47 | fuel injector (well-worn)"> <a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12677286746D9559139697008051705" class="btn-inspect">Inspect</a><span class="price">26,460</span> <div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhnwMzJemkV08-jhIWZlP_1IbzUklRc7cF4n-SPpIr33gS1rkJqYGD7J4GQcQY5aFCG-lHrlO650JLv6ZzMziA2vXMgtmGdwULg8tCd0w"/></div> <span class="name">AK-47 | Fuel Injector (Well-Worn)</span> </div> <div class="item" data-error="" data-bot_id="37" data-price="6090" data-asset_id="12677215278" data-market_hash_name="M4A4 | 龍王 (Dragon King) (Minimal Wear)" data-name="m4a4 | 龍王 (dragon king) (minimal wear)"> <a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12677215278D7254987710742629388" class="btn-inspect">Inspect</a><span class="price">6,090</span> <div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpou-6kejhjxszFJTwW0924l4WYg-X1P4Tdn2xZ_ItyiO2Yot-n3gztrUduMW6icdWcc1RqM1HR_FfswLu6gZe4tZrNmiBkpGB8smM7Zio1"/></div> <span class="name">M4A4 | 龍王 (Dragon King) (Minimal Wear)</span> </div> <div class="item" data-error="" data-bot_id="37" data-price="79700" data-asset_id="12677151027" data-market_hash_name="★ Bayonet | Forest DDPAT (Battle-Scarred)" data-name="★ bayonet | forest ddpat (battle-scarred)"> <a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12677151027D9430682923177156928" class="btn-inspect">Inspect</a><span class="price">79,700</span> <div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpotLu8JAllx8zAaAJG6My3gL-DkvbiKvXXz29XucMoibnArY6s2AXn8kRvZW76LYWSJFdoNwrV_1e2yezuhJbqot2Xnvb67xpg"/></div> <span class="name">★ Bayonet | Forest DDPAT (Battle-Scarred)</span> </div> <div class="item" data-error="" data-bot_id="37" data-price="5317" data-asset_id="12676401658" data-market_hash_name="AK-47 | Orbit Mk01 (Minimal Wear)" data-name="ak-47 | orbit mk01 (minimal wear)"> <a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12676401658D9261165439988559703" class="btn-inspect">Inspect</a><span class="price">5,317</span> <div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhnwMzJegJB49C5mpnbxsjmNr_ummJW4NE_iL-ZrYj03wLl_hFqNm71cteWdlA5Zl2F-FG-yO_r0cW4uMnMynFl6T5iuyjnxSwaOw"/></div> <span class="name">AK-47 | Orbit Mk01 (Minimal Wear)</span> </div> <div class="item" data-error="" data-bot_id="37" data-price="52140" data-asset_id="12676164519" data-market_hash_name="★ Shadow Daggers | Scorched (Field-Tested)" data-name="★ shadow daggers | scorched (field-tested)"> <a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12676164519D16161770010107986788" class="btn-inspect">Inspect</a><span class="price">52,140</span> <div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpovbSsLQJfw-bbeQJR_OOylZCbm_LLPr7Vn35cppwl2-vAot6n0Aa3_Uo_amv3dYKcewRsYl7V_QDql-fu15fv75TPznF9-n515DsDCZ4"/></div> <span class="name">★ Shadow Daggers | Scorched (Field-Tested)</span> </div> <div class="item" data-error="" data-bot_id="37" data-price="27660" data-asset_id="12676144964" data-market_hash_name="AK-47 | Case Hardened (Field-Tested)" data-name="ak-47 | case hardened (field-tested)"> <a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12676144964D876729287817217943" class="btn-inspect">Inspect</a><span class="price">27,660</span> <div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhhwszHeDFH6OO7kYSCgvq6Yu-EwzsIuZIj3uiY99WmiwGx_kc9Zjr6JYHBIwM5MFHX-Fi9w-u-1Ij84soNG54bQA"/></div> <span class="name">AK-47 | Case Hardened (Field-Tested)</span> </div> <div class="item" data-error="" data-bot_id="37" data-price="23420" data-asset_id="12676074732" data-market_hash_name="StatTrak™ AWP | Fever Dream (Field-Tested)" data-name="stattrak™ awp | fever dream (field-tested)"> В let baseName = "StatTrak™ AWP | Fever Dream (Field-Tested)".split(',') Любые из имен. (В данном случае беру только 1, но по сути нужно несколько) Этого достаточно или вообще весь код? |
Nikolay37, у тебя извращенное понятие тестового примера. :(
Убери из этого фарша не нужную информацию. |
Цитата:
|
Цитата:
<div id="items"> <div class="scrollbar"> <div class="item"> <span class="name">★ M9 Bayonet | Bright Water (Factory New)</span> </div> <div class="item"> <span class="name">★ Falchion Knife | Blue Steel (Field-Tested)</span> </div> <div class="item"> <span class="name">AWP | Man-o'-war (Minimal Wear)</span> </div> <div class="item"> <span class="name">AWP | Man-o'-war (Minimal Wear)</span> </div> <div class="item"> <span class="name">AK-47 | Case Hardened (Field-Tested)</span> </div> |
Цитата:
Или ты по тексту ищешь чего? Нужно клацать по элементам с указанным текстом? |
Цитата:
В общем проблему решили с помощью forEach. Там клацаем по названиям аттрибутов baseName.forEach(function(i, e, arr){ $('div.item[data-market_hash_name="'+i+'"]').click(); }); |
Nikolay37, вот так выглядят тестовые примеры. ;)
<!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <script src='https://code.jquery.com/jquery-latest.js'></script> <!-- <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> --> <style type='text/css'> </style> <script type='text/javascript'> $(function(){ $('.name').click(function(){ alert(this.innerHTML); }); var arr=[ 'AK-47 | Case Hardened (Field-Tested)', 'AWP | Man-o\'-war (Minimal Wear)' ]; var o=document.querySelectorAll('.name'); for (var i=0; i<arr.length; i++) { for (var j=0; j<o.length; j++) { if (o[j].innerHTML==arr[i]) { o[j].click(); }; }; }; }); </script> </head> <body> <div id="items"> <div class="scrollbar"> <div class="item"> <span class="name">★ M9 Bayonet | Bright Water (Factory New)</span> </div> <div class="item"> <span class="name">★ Falchion Knife | Blue Steel (Field-Tested)</span> </div> <div class="item"> <span class="name">AWP | Man-o'-war (Minimal Wear)</span> </div> <div class="item"> <span class="name">AWP | Man-o'-war (Minimal Wear)</span> </div> <div class="item"> <span class="name">AK-47 | Case Hardened (Field-Tested)</span> </div> </div> </div> </body> </html> |
Часовой пояс GMT +3, время: 16:42. |