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