Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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 无法更改div中的文本_Javascript_Jquery_Html_Ajax_Greasemonkey - Fatal编程技术网

Javascript 无法更改div中的文本

Javascript 无法更改div中的文本,javascript,jquery,html,ajax,greasemonkey,Javascript,Jquery,Html,Ajax,Greasemonkey,我有一个脚本,可以逐字翻译一个俄语论坛,但是有一种div元素我无法更改它的文本,这就是我的问题,我如何更改它?由于论坛需要注册,我将尝试在下面提供我能提供的每一个代码细节 我试图更改文本的网页特定代码: 我的代码如下: 我试过的 我已经尝试过一系列jQuery过滤器,它们可以获取div子级,但事实上它并不存在 当我使用以下命令选择div本身时: 控制台结果为空 当我运行我在这里发布的代码时(在标题下方的代码下),结果是 分别针对jText和jThis VAR 最后当我尝试 我用图像这个词

我有一个脚本,可以逐字翻译一个俄语论坛,但是有一种div元素我无法更改它的文本,这就是我的问题,我如何更改它?由于论坛需要注册,我将尝试在下面提供我能提供的每一个代码细节


我试图更改文本的网页特定代码:
我的代码如下:
我试过的 我已经尝试过一系列jQuery过滤器,它们可以获取div子级,但事实上它并不存在

当我使用以下命令选择div本身时: 控制台结果为空

当我运行我在这里发布的代码时(在标题下方的代码下),结果是

分别针对jText和jThis VAR

最后当我尝试 我用图像这个词代替了真实的图像

当我尝试使用时也失败了 导致包装破损


由于它是一个像其他被替换的文本一样的文本,我无法理解为什么TreeWalker没有“看到”这种div文本


  • 添加澄清评论


所有span标记看起来都已关闭,即使是图像上包装的span标记也已关闭。

您似乎可以在正文中找到文本,但无法找到可折叠的标题

为了使面板可折叠而调用的任何JavaScript都会更改标记,因此您需要在可折叠初始化后检查F12工具中的新标记。我无法确定您使用的是什么框架,但JQuery.UI往往会大量更改DOM


建议您添加一个JSFiddle或Plunker。

据我目前所知,您正在尝试将div标记替换为俄语文本内容,例如“ССццц”到英语“Images”值中,并且您正在尝试使用jQuery和TreeWalker遍历来完成此操作,下面是分别适用于每一个标记的代码:

使用jQuery替换文本内容: 使用TreeWalker替换文本内容
我不认为使用这两种方法来替换文本有什么好处,因为它们中的任何一种都有效。

昨天我想出了解决方案,以前无法在这里发布。因此,当脚本运行时,要选择的元素未准备就绪,因此,换行内容为。 为了解决这个问题,我使用了。 在分析了“最后一位感谢者”名单后,我发现了这个问题,真不敢相信我以前从未见过它

解决方案:
似乎有一个启动的
未关闭。我想知道这是否会引起问题。@SpencerWieczorek正上方有两个跨度,但它们是闭合的。我已经添加了一个这样的图像。源html并不总是等于呈现的html,特别是如果有无效的结束标记并且浏览器试图原谅-您是否可以提供JSFiddleI保存的源代码并查看IDE搜索标记上的错误而不关闭,上的所有span标记都已关闭。它应该可以工作,但不能。我无意使用我使用的jQuery,因为treewalker没有做到这一点。由于treewalker没有找到要替换的文本,jQuery也没有返回我要选择的第一个div元素。您发布的代码的结果实际上,这里是jQuery版本结果的演示:这里是另一个使用treewalker的版本:在这两个版本中,我都看到文本被替换,如果是,你可能想仔细检查一下这些代码是否正在执行,我没有收到。你想让我把代码粘贴到JSFiddle上看看它是否在那里工作吗?如果你把代码放在JSFiddle上,那么你可以共享这个链接,stackoverflow上的人可以使用你的代码来帮助你
<div class="sp-wrap">
    <div class="sp-head folded clickable">Скриншоты</div> //once clicked unhide the div below to show images and by clicking it again hides.
    <div class="sp-body inited" title="" style="display: none;"> //hidden div
        <div class="clear"></div>
        <h3 class="sp-title">Скриншofы</h3>
        <span class="post-align" style="text-align: center;">
        <div class="clear"></div>
        <div class="sp-fold clickable">[свернуть]</div>
    </div>
</div>
.sp-head {
    border-width: 0;
    color: #2a2a2a;
    cursor: pointer;
    font-size: 11px;
    font-weight: bold;
    line-height: 15px;
    margin-left: 6px;
    padding: 1px 14px 3px;
}
//... header
// @require     https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js
// @grant       GM_addStyle
// ==/UserScript==

$('div.sp-wrap > div:first').each( function (){ //div:contains("Скрин") div.sp-head.folded.clickable

    var jThis = $(this);
    var jText = jThis.textContent;
    var jhtml = jThis.html();

    console.log(jText);
    console.log(jThis);
    //console.log(jhtml);

    jText = jText.replace(/Скрин(лист|шоты)/ig, "Images");

});

var textWalker   = 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 textNode;

while (textNode  = textWalker.nextNode() ) {
    var oldText  = textNode.nodeValue;
    var newText  = oldText.replace (/Главная/ig, "Home");
    newText      = newText.replace (/Скрин(лист|шоты)/ig, "Images");
    newText      = newText.replace (/Последние поблагодарившие/ig, "Last Who Thank");
    //...
    //repeats word by word until ends at the line below     
    textNode.nodeValue = newText;
}
$('div.sp-head.folded.clickable')
$('div.sp-wrap div:contains("Скрин")').each( function (){ 

    var jThis = $(this);
    var jText = jThis.text();
    jThis.text("Images");

});
$('div.sp-wrap div:contains("Скрин")').each( function (){ 

    var jThis = $(this);
    var jText = jThis.text();
    jThis.parent().text("Images");

});
$('div.sp-wrap > div:first').each( function (){ 

    var jThis = $(this);
    var jText = jThis.text();
    var jhtml = jThis.html();

    console.log(jText);
    console.log(jThis);   

    jText = jText.replace(/Скрин(лист|шоты)/ig, "Images");
   $(jThis).text(jText);

});
var textWalker   = 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
);



while (textWalker.nextNode() ) {
    var textNode = textWalker.currentNode;    
    var oldText  = textNode.nodeValue;
    var newText  = oldText.replace (/Главная/ig, "Home");
    newText      = newText.replace (/Скрин(лист|шоты)/ig, "Images");
    newText      = newText.replace (/Последние поблагодарившие/ig, "Last Who Thank");
    //...
    //repeats word by word until ends at the line below     
    textNode.nodeValue = newText;
}
//...header
// @require     https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js
// @require     https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant       GM_addStyle
// ==/UserScript==


waitForKeyElements ("div.sp-head.folded.clickable", translateDiv);


function translateDiv (jNode) {

    var jText  = jNode.text();
    var reg    = /Скрин(лист|шоты)/ig;

    if (reg.test (jText) ) {

        jNode.text( jText.replace(/Скрин(лист|шоты)/ig, "Images") );

    } else if (jText.indexOf("Последние поблагодарившие") != -1) {

        jNode.text("Last Who Thanks");

    }

}