Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按指定文本获取标记_Javascript_Jquery_Html_Dom_Jquery Selectors - Fatal编程技术网

Javascript 按指定文本获取标记

Javascript 按指定文本获取标记,javascript,jquery,html,dom,jquery-selectors,Javascript,Jquery,Html,Dom,Jquery Selectors,我需要一个简单的解决方案来获取包含给定文本的DOM标记 例如 我不想使用任何正则表达式,我需要干净简单的代码。您可以使用包含选择器: $('body *:contains("specified text")')//return div element(s) that contains specified text 但是,contains不适用于严格的比较。要进行严格比较,需要使用筛选函数: $('body *').filter(function(){ return $(this).te

我需要一个简单的解决方案来获取包含给定文本的DOM标记

例如


我不想使用任何正则表达式,我需要干净简单的代码。

您可以使用包含选择器:

$('body *:contains("specified text")')//return div element(s) that contains specified text
但是,contains不适用于严格的比较。要进行严格比较,需要使用筛选函数:

$('body *').filter(function(){
    return $(this).text() == "specified text";
});

你可以试一试:

function finder(query) {

    // get all elements
    var elements = document.getElementsByTagName('*');
    var out = [];
    for (var i = 0, l = elements.length; i < l; i++) {

        // if the element isn't a script and doesn't contain any child
        // elements and the text contains whatever you passed
        // in as a query, add it to the out-going array
        if (elements[i].tagName !== 'SCRIPT'
            && !elements[i].children.length
            && elements[i].textContent.indexOf(query) > -1) {
            out.push(elements[i]);
        }
    }
    return out;
}

// call finder with the parameter you want
var arr = finder('Hello');

// call the update function with the array
// passed back from finder
updateDom(arr);

function updateDom(arr) {

    // loop over the elements array from finder
    // and change the contents
    for (var i = 0, l = arr.length; i < l; i++) {
        arr[i].textContent = 'Hello Mikołaj Król';
    }
}
注意,textContent是IE9+


你想询问页面上的每个元素,而不仅仅是div?为什么我们要在这里发布解决方案。这个问题不符合标准。我需要干净简单的代码给我密码。欢迎来到这里。你读过这部分了吗?它解释了如何写一个关于堆栈溢出的好问题?如果没有,请阅读:和/或为我的错误道歉。这是我的第一篇文章。非常感谢您的注释。如果文本位于跨度或表格中,该怎么办?OP没有提到它必须在一个分区中。@Andy:OP已经共享了dom。这里没有span/table元素。一个获取DOM标记的简单解决方案——这里也没有提到div。这只是一个例子。看看共享标记。它有一个带文本的div。注意单词example。
function finder(query) {

    // get all elements
    var elements = document.getElementsByTagName('*');
    var out = [];
    for (var i = 0, l = elements.length; i < l; i++) {

        // if the element isn't a script and doesn't contain any child
        // elements and the text contains whatever you passed
        // in as a query, add it to the out-going array
        if (elements[i].tagName !== 'SCRIPT'
            && !elements[i].children.length
            && elements[i].textContent.indexOf(query) > -1) {
            out.push(elements[i]);
        }
    }
    return out;
}

// call finder with the parameter you want
var arr = finder('Hello');

// call the update function with the array
// passed back from finder
updateDom(arr);

function updateDom(arr) {

    // loop over the elements array from finder
    // and change the contents
    for (var i = 0, l = arr.length; i < l; i++) {
        arr[i].textContent = 'Hello Mikołaj Król';
    }
}