如何搜索HTML的每一部分
How to search through every part of HTML
我试图忽略HTML部分中的任何链接,并获取任何没有链接的内容来执行我的功能。
到目前为止,我拥有的是:
$(document).ready(function() {
// search through paragraphs
$("p").each(function() {
// if there is not a link
if (!$(this).find('a').hasClass('external-link')) {
// do my function
}
})
})
我的问题是,如果一行中有一个链接,但我想在同一行中捕捉一些东西,它就不起作用,因为它忽略了整行。
这里有一个链接到一个正在工作的JSFiddle,希望它能让你看到我正在努力做什么
提前感谢
编辑:
我的措辞可能有点令人困惑。
我正在努力实现的一个例子是:
<p>Link to ignore: <a href="http://www.bbc.co.uk" class="external-link" rel="nofollow">news</a>
Link to create: news </p>
我的代码会在<p>
标签中搜索"新闻",然后创建一个指向网站的链接。但是,我不想在现有链接之上创建链接。我当前的代码会忽略<p>
标记中的所有内容,因为那里已经有一个链接了。
这里有一种方法可以忽略锚点,这样就不会在现有锚点中创建新的锚点
这只针对文本节点
$(document).ready(function () {
$("p").contents().each(function(_, node) {
if ( node.nodeType && node.nodeType === 3 ) {
var regex = /(news)/g;
var value = node.nodeValue.replace(regex, '<a href="https://www.bbc.co.uk/$1">$$&</a>');
if (value.match(regex)) {
var wrap = document.createElement('span');
wrap.innerHTML = value
node.parentNode.insertBefore(wrap, node);
node.parentNode.removeChild(node);
}
}
});
});
FIDDLE
为了保持dollarsign,您必须执行$$
,因为dollarign在正则表达式中具有特殊意义。
我采用了不同的方法,扩展了jQuery的函数原型-
$.fn.extend({
replace: function (options) {
var defaults = {
search: ''
};
options = $.extend(defaults, options);
return this.each(function () {
var string = $(this).html();
//var regex = /(search)/g;
var regex = /(^|'s)news/;
//var regex = new RegExp("(^|'s)" + options.search);
console.log(regex);
var replace_text = string.replace(regex, '<a href = "https://www.bbc.co.uk/$1">$&</a>');
$(this).html(replace_text);
});
}
});
$('p').replace({search: 'news'});
示例
$('p').replace();
稍微更改正则表达式以考虑"news"开头的空格(而不是大于括号),可以对扩展函数进行一次简洁的调用。还进行了更新,使函数更加有用,允许用户向函数传递参数。仍然不完美——一项正在进行的工作。
您可以通过查看每个p
的子节点并获取没有external-link
:类的子节点来实现这一点
var otherText = [];
$("p").each(function(){
console.log(this.childNodes);
var kids = this.childNodes;
for(var i = 0; i < kids.length; i++)
{
if(!($(kids[i]).hasClass("external-link")))
{
otherText.push(kids[i]); //or do what you want with the node here
}
}
});
console.log("other Text", otherText);
jsFiddle
相关文章:
- Html地图对象-点击地图获取id的一部分
- 使文本仅滚动HTML页面的一部分
- 用HTML元素替换字符串的一部分
- 如何用jQuery替换HTML标签的一部分
- 只是 JQuery 可执行文件的一部分.当直接粘贴到HTML中时,一切正常(window.location)
- 通过Java加载XML并制作HTML DOM的一部分
- 复制和修改元素,以便在html文档的另一部分使用它们
- “data-”属性作为超链接的一部分.HTML 到 JavaScript
- Jquery 加载外部 HTML 的一部分
- 如何仅将字符串的一部分呈现为 HTML
- 如何在对象标记中仅加载 HTML 页面的一部分,而不是整个 HTML 文档
- 如何将 html 页面的一部分保存到客户端 (javascript) 或服务器端 asp.net 的图像或 pdf
- 如何使用 Javascript 或 JQuery 在 HTML 中突出显示输入文本字段的一部分
- 使索引.html路径的一部分
- 节点.js我做错了哪一部分?服务器.js正在运行,但我看不到 HTML 页面
- 仅使用 html 将网页的一部分插入到另一个网页中
- 使用 jQuery 获取 html 字符串的一部分
- 使用 XMLHttpRequest 获取网页,但只获取 html 的一部分
- 在 Javascript 中使用正则表达式替换 html 字符串的一部分
- 使用Ajax发布HTML页面的一部分