- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 HTML 页面上有一些文本。需要一个小书签(无 jQuery),它将使用正则表达式找到一段文本,然后将其替换为以文本作为参数的链接
之前的例子:
aaa bbb ccc ddd
之后的例子:
aaa <a href="http:www.whatever.com?bbb">bbb</a> ccc ddd
假设我们正在寻找“bbb”
最佳答案
此解决方案将爬取 DOM 搜索文档元素中的文本节点,跳过您想要的任何元素。例如,您可能想跳过 标签以及 <script> 标签和其他标签。这样,您就不会替换元素节点或基本页面功能。
(function(){
// don't replace text within these tags
var skipTags = { 'a': 1, 'style': 1, 'script': 1, 'iframe': 1 };
// find text nodes to apply replFn to
var findKW = function ( el, term, replFn ) {
var child, tag;
for (var i = el.childNodes.length - 1; i >= 0; i--) {
child = el.childNodes[i];
if (child.nodeType == 1) { // ELEMENT_NODE
tag = child.nodeName.toLowerCase();
if (!(tag in skipTags)) {
findKW(child, term, replFn);
}
} else if (child.nodeType == 3) { // TEXT_NODE
replaceKW(child, term, replFn);
}
}
};
// replace terms in text according to replFn
var replaceKW = function ( text, term, replFn ) {
var match,
matches = [];
while (match = term.exec(text.data)) {
matches.push(match);
}
for (var i = matches.length - 1; i >= 0; i--) {
match = matches[i];
// cut out the text node to replace
text.splitText(match.index);
text.nextSibling.splitText(match[1].length);
text.parentNode.replaceChild(replFn(match[1]), text.nextSibling);
}
};
var replTerm = prompt('Please enter term to replace');
findKW(
document.body,
// using \\b to only replace when the term is the whole word
// e.g. if term is "bbb" then "aabbbccc" will not match
new RegExp('\\b(' + replTerm + ')\\b', 'g'),
// your replacement function, change URL accordingly
function (match) {
var link = document.createElement('a');
link.href = 'http://google.com/#q=' + match;
link.target = '_blank';
link.innerHTML = match;
return link;
}
);
}());
这里以书签形式最小化:
javascript:(function(){var a={a:1,style:1,script:1,iframe:1};var b=function(d,e,f){var g,h;for(var i=d.childNodes.length-1;i>=0;i--){g=d.childNodes[i];if(g.nodeType==1){h=g.nodeName.toLowerCase();if(!(h in a)){b(g,e,f)}}else if(g.nodeType==3){c(g,e,f)}}};var c=function(a,b,c){var d,e=[];while(d=b.exec(a.data)){e.push(d)}for(var f=e.length-1;f>=0;f--){d=e[f];a.splitText(d.index);a.nextSibling.splitText(d[1].length);a.parentNode.replaceChild(c(d[1]),a.nextSibling)}};var d=prompt("Please enter term to replace");b(document.body,new RegExp("\\b("+d+")\\b","g"),function(a){var b=document.createElement("a");b.href="http://google.com/#q="+a;b.target="_blank";b.innerHTML=a;return b})})()
将其复制到书签中并在任何页面上试用!注意:搜索区分大小写,但您可以将“i”标志添加到 RegExp 以防止出现这种情况。
我正在尝试创建一个小书签来填充我当前页面表单上的字段。 这是一个用给定值填充 1 个字段的简单脚本: javascript:(function(){d=document;e=d.getElementB
我正在制作一个书签,它调用 Google App Engine 应用程序。 GAE 应用程序使用登录信息,我想将这些信息存储在书签中,因此当用户第一次单击书签时,它会询问登录信息,但从下次开始它会自动
如何在屏幕中间弹出一个 div 的地方制作书签? 看起来很简单,就是想不起来。 最佳答案 要让一个 div 出现在屏幕中间,你需要两个 div,一个在另一个里面: 外层 div 固定在 top 50%
我在 HTML 页面上有一些文本。需要一个小书签(无 jQuery),它将使用正则表达式找到一段文本,然后将其替换为以文本作为参数的链接 之前的例子: aaa bbb ccc ddd 之后的例子: a
我如何转换这个“自动滚动”的小书签,以便我可以将它放在我的网站上,以便在页面加载时自动运行。我尝试按原样使用代码,但我想我必须在网站读取它之前更改一些内容。 javascript:/*The%2
我有一个完美工作的书签,可以获取文档标题和当前网站的 URL,并将其放入新加载页面的 URL 中(下面的代码)...现在我想知道如何让这个 domain.com/bookmarklet ?…在一个新的
我做了这个书签: javascript:(function(){var s=document.createElement('script');s.setAttribute('src','http://
我想制作一个 Chrome Bookmarklet,它可以打开一个带有特定操作的新标签页。 更确切地说,我想要一个固定的 URL,如 "https://www.blablabla.com/search
我正在创建一个小书签,它在某些网站上运行良好,但在其他网站上则完全不起作用。当失败时,脚本仍然添加到底部...但只有部分 javascript 运行。 我假设存在 JavaScript 冲突...有什
我需要创建一个链接来打开页面并向其中添加一些脚本。 这就是为什么我认为创建书签是最好的方法。例如,我想将用户重定向到一个页面,并在用户尝试关闭选项卡时提醒用户。 我想使用的代码 javascript:
如何从外部站点加载 html? (跨域) 最佳答案 如果您只想显示其他网站页面的完整内容,可以使用标签。 Ajax (带有 XmlHttpRequest 对象) 无法跨域工作(除了某些最新的浏览器,考
我喜欢用 JavaScript/Bookmarklets 拉动我的 Chrome/Chromium 体验, 但现在我面临以下问题: 代码 javascript:/*img2float*/ var st
我正在尝试创建一个书签,它将在网页上的文本区域中插入一些文本(网页供内部使用,因此没有必要链接)。 这是我尝试过的 JavaScript 代码示例: (function(){document.getE
抱歉,我已经在 StackOverflow 上搜索了一段时间,但似乎无法获得足够的信息来解决我的问题。我不是很擅长正则表达式,或者在小书签中使用 javascript。希望有人能帮我解决这个小问题。
我尝试运行一个简单的代码来替换 JS 中 HTML 页面正文中的字符串。 document.body.innerHTML = document.body.innerHTML.replace(/foo/
我编写了一个脚本来更改设计糟糕的页面上的 CSS 元素。我一直在 Chrome 中测试它,现在它的功能齐全。我已将其放在网络上,现在将其用作小书签文本: javascript:(function(){
我有这个 javascript 书签这会将提示值附加到 www.oracle.com 并在选项卡中打开该 url。 javascript:window.location.href='http://ww
这个想法是写一个简单的书签。如果问题可能重复,请指点我,因为我没有找到。 我正在尝试使用书签并使用某些 jquery api 使当前页面启用 jquery。 Uncaught SyntaxError:
有人想试一试为什么这个小书签在 IE8 中失败吗?它将 Friefox 和 Safari 中的所有文本转为大写。但在 IE8 中,它只是因“正在加载...”而停滞不前。我在 IE8 中启用了运行 sc
有没有什么方法可以为谷歌浏览器制作一个 JavaScript 书签,当点击它时,当前页面会从 : www.youtube.com/watch?v=VIDEOID 或 www.youtube.com/w
我是一名优秀的程序员,十分优秀!