Как сфокусировать элементы поисковых предложений YouTube?

В настоящее время у меня есть этот код. При нажатии средней кнопки мыши поиск YT откроется в новой вкладке:

(function() {
    'use strict';
 
    var searchIcon = document.getElementById("search-icon-legacy");
    if (searchIcon) {
        searchIcon.addEventListener("mousedown", function(event) {
            event.preventDefault();
            var searchInput = document.getElementsByClassName("ytd-searchbox")[3].value.trim();
            if (event.which === 2 && searchInput) {
                window.open("https://www.youtube.com/results?search_query = " + encodeURIComponent(searchInput), "_blank");
            }
        });
    }
})();

Картинка

Сейчас я пытаюсь сфокусировать поисковые предложения, щелкнув их средней кнопкой мыши, но у меня возникают трудности, потому что я не знаю, как сфокусировать их, как кнопку поиска, которая является элементом.

Что это значит: trying to focus the search suggestions by middle-clicking them? Первую часть — открытие поиска YT в новой вкладке — я могу себе представить. Но я не могу представить, что вы пытаетесь сделать во второй части. Что именно вы включаете средней кнопкой мыши и что должно произойти, когда вы нажимаете на нее средней кнопкой мыши? Извините за тупость, но прошу вас объяснить немного подробнее / ясно.

cssyphus 05.05.2024 23:32

Извините, что не четко описал. При наведении курсора мыши на элемент поиска он должен захватить текст из элемента и открыть его как результат поиска в новой вкладке, нажав среднюю кнопку мыши.

Julius Esen 06.05.2024 00:40

@JuliusEsen предложения возвращаются по запросу. Вы можете попробовать получить предложения, проверив элемент sbsb_b. Пример: document.getElementsByClassName("sbsb_b")[0].childNodes, а затем прочитать outerText каждого дочернего узла.

Mauricio Arias Olave 07.05.2024 07:03

@MauricioAriasOlave Можете ли вы дать мне полезный подход или хороший метод? Является ли объявление const хорошей поддержкой в ​​этом случае?

Julius Esen 07.05.2024 17:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

если вы хотите открыть одно из предложений поиска на другой вкладке, щелкнув средней кнопкой мыши, то это должно сработать:

function callback(event){
    if (!event.button === 1) return; // return if not middle button
    const ele = event.target.closest('div.sbqs_c');
    if (!ele) return; // guard incase it's wrong element because we are listening on `body` instead of `<ul>`
    const url = `https://www.youtube.com/results?search_query=${encodeURIComponent(ele.textContent)}`;
    window.open(url, '_blank');
}

document.body.addEventListener('auxclick', callback);

вы можете добавить прослушиватель «auxclick» к конкретному элементу (ul.sbsb_b) вместо тела, но для этого вам придется использовать наблюдатель мутаций, поскольку окно предложений не загружается до тех пор, пока пользователь не взаимодействует с полем поиска. .

@GTK Спасибо!

Я добавил ваш код в свой текущий обновленный код, и он работает :)

(function() {
    'use strict';

    function callback(event){
        if (event.button !== 1) return; // return if not middle button
        const ele = event.target.closest('div.sbqs_c');
        if (!ele) return; // guard in case it's the wrong element because we are listening on `body` instead of `<ul>`
        const url = `https://www.youtube.com/results?search_query=${encodeURIComponent(ele.textContent.trim())}`;
        window.open(url, '_blank');
    }

    document.body.addEventListener('auxclick', callback);

    // MutationObserver to observe changes in the DOM
    const observer = new MutationObserver(() => {
        const suggestions = document.querySelectorAll('div.sbqs_c');
        suggestions.forEach(suggestion => {
            suggestion.removeEventListener('auxclick', callback); // Ensure no duplicate listeners
            suggestion.addEventListener('auxclick', callback);
        });
    });

    // Configuration of the observer
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
})();

Другие вопросы по теме