@Gagatyn
Самоучка

Как передать в string.match(???) переменную и как сделать автоклик?

Здравствуйте!

1) На сайте вордстат яндекс вместе с расширением вордстатер я пробовал искать по своему шаблону фразы. Так как их много и мне надоело тыкать и читать. Скрипт сам бы отображал похожие и ускорял время сбора.
Не могу я передать в метод match() переменную new RegExp(), т.е. могу, но на выходе null

2) чтобы не терять время, я попробовал автоклик сделать. Но не кликается :(
Использовал new Event('click') и на элемент elem.dispatchEvent()

Сам код(в jsfiddle и codepen не покажу, придётся тестить в консольке):
/*let lg = function() {
    console.log(...arguments);
}*/

let desc = prompt('Название:');
let ev = new Event('click'); // <-- событие клик
    let addE = parent.querySelector('.normal.word-manage-button'); // на что кликнуть

let devideDesc = function(e) {
    let splitDesc = e.split(' ');

    let test = e.split(' ', splitDesc.length - 1);

    let begin = test.join(' ');

    let end = splitDesc[splitDesc.length - 1];

    return {
        b: begin,
        e: end
    }
}

let txtCls = '.b-word-statistics__td-phrase span[data-reactroot]';

let getArrRows = function(cls) {
    let rows = document.querySelectorAll(cls);

    let arr = [];

    rows.forEach(function(e, i) {
        arr[i] = e.querySelector('span:first-child');
    });

    return arr;
};

let arrRows = getArrRows(txtCls);

let begin = new RegExp('^' + devideDesc(desc).b, 'g'); // здесь создаю выражение начала и конца

let end = new RegExp(devideDesc(desc).e + '$', 'g');

let lightWords = function(e, i) {
    let textContent = e.textContent;

    let regExpB = textContent.match(begin); // передаю. и на выходе null
    let regExpE = textContent.match(end );  //

    console.log(regExp);

    let failRegExp = textContent.match(/пол|белы|светильник/g);

    let parent = e.closest('td');

    if (failRegExp) {
        return {
            fail: failRegExp.toString(),
            txt: textContent,
            parent: e.closest('td'),
        };
    }

    if (regExpB && regExpE) {
        parent.style.background = 'greenyellow';
        addE.dispatchEvent(ev); // <-- кликаем! но не кликается
        return {
            r: regExp,
            txt: textContent,
            parent: e.closest('td'),
        };
    }

    return textContent;
}

arrRows.forEach((e, i) => {
    lightWords(e, i);
});
  • Вопрос задан
  • 218 просмотров
Решения вопроса 1
@alexalexes
1)
let regExpB = textContent.match(begin); // передаю. и на выходе null
    let regExpE = textContent.match(end );  //

А вы получаете тот же самый результат, когда begin и end при отладке заменяете на статичные регулярки, по формату аналогичные тому, что формируется в begin и end. Может проблема в корректном формировании begin и end, а не в их выполнении?
2) addE.dispatchEvent(ev); заменить на addE.click() - вроде самый простой поджигатель события, если на элементе есть обработчик или доступно какое-нибудь действие по умолчанию для клика, то должно работать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы