Javascript usercript - Найти и заменить: текстовые узлы и HTML

1

Я пытаюсь создать usercript (Tampermonkey), чтобы добавить некоторые вспомогательные кнопки в сайт, и изначально я использовал сценарий ниже на основе опубликованного здесь.

setInterval(function() {

//RegEx for finding any string of digits after "ID: " up to the next space
var myRegexp = /ID:\s(\d*?)\s/gi;

];
var txtWalker   = document.createTreeWalker (
    document.body,
    NodeFilter.SHOW_TEXT,
    {   acceptNode: function (node) {
            //-- Skip whitespace-only nodes
            if (node.nodeValue.trim() )
                return NodeFilter.FILTER_ACCEPT;

            return NodeFilter.FILTER_SKIP;
        }
    },
    false
);
var txtNode     = null;

while (txtNode  = txtWalker.nextNode () ) {
    var oldTxt  = txtNode.nodeValue;

    //Find all instances
    match = myRegexp.exec(oldTxt);

    while (match != null) {

        //Get group from match
        var idNum = match[1]

        //Replace current match with added info
        oldTxt = oldTxt.(idNum, idNum+"| <SomeHTMLHere> "+idNum+"    | ");

        //Update text
        txtNode.nodeValue = oldTxt;

        //Check for remaining matches
        match = myRegexp.exec(oldTxt);
    }
}

}, 5000);

Теперь я хотел бы добавить немного больше функциональности в текст, возможно, что-то щелкнуть, чтобы скопировать в буфер обмена или вставить в другое место. Теперь я знаю, что я работаю с текстовыми узлами в исходном скрипте, но я хотел знать, если бы в любом случае была адаптация текущего скрипта для вставки HTML в эти моменты без перезаписи с нуля.

Основная проблема с сайтом - это ID: ##### values. Я ищу все, которые отображаются внутри одного и того же элемента, как показано ниже, поэтому я могу просто найти их по элементу (или, по крайней мере, не с моими ограниченными знаниями JS).

<div>
ID: 1234567 | Text
ID: 45678 | Text
</div>

Если кто-то может указать мне в правильном направлении, что было бы здорово или, по крайней мере, сказать мне, что это невозможно без перезаписи.

Теги:
replace
userscripts
tampermonkey

1 ответ

0

Хорошо, поэтому переписывание на самом деле получилось очень хорошо. Работает намного красивее и более лаконично. Надеюсь, это поможет кому-то в будущем. Если кто-то хочет предложить какие-либо улучшения, пожалуйста, не стесняйтесь!

setInterval(function() {

//Regex
var reg = /ID:\s(\d*?)\s/gi;
var result;

//Get all classes that this applies to
$('.<parentClass>').each(function(i, obj) {
    var text = $(this).html();

    //Do until regex can't be found anymore
    while (result = reg.exec(text)) {

        //Get first regex group
        var str = result[1];
        //Add in desired HTML
        var newhtml = $(this).html().replace(str, '|<span class="marked">' + str + '</span>|');
        //Replace
        $(this).html(newhtml);
    }
});

//Click function for added HTML
$(".marked").click(function(){

    //Get text inside added HTML
    var id = $(this).text();
    //Construct desired string
    var Str = "someText " + id;
    //Insert into message box
    textarea = document.querySelector('.<inputArea>')
    textarea.value = Str;
    textarea.focus();
});

}, 5000);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню