使用 jQuery 或 Javascript 在页面上选择数字

Posted

技术标签:

【中文标题】使用 jQuery 或 Javascript 在页面上选择数字【英文标题】:Select numbers on a page with jQuery or Javascript 【发布时间】:2011-09-22 18:34:38 【问题描述】:

我只是想知道是否有一种方法可以使用 jQuery 或纯 javascript 来定位页面上的数字。

这是我想做的:

假设页面上有“6 月 23 日”。我想要做的是能够在号码前面加上一些<span> 选择器。

在 jQuery 中使用 :contains() 会选择整个内容,而不仅仅是数字。

这些字符串是由我正在开发的 Wordpress 主题生成的,没有任何包装元素,我只想选择数字

任何帮助将不胜感激!感谢您甚至考虑它。 -乔治

【问题讨论】:

您知道您的日期所在的确切元素吗?你能做一些正则表达式并找到一个日期吗? +1 回答有趣的问题 【参考方案1】:

您还可以选择包含逗号作为千位分隔符的十进制数字:

let regex = /([,\d]*\.?\d+)/g;

这将匹配 12341,2341234.56781,234.56780.5678.5678

完整解决方案请参考the above answer。

【讨论】:

【参考方案2】:

您可以遍历所有元素,查看文本节点,然后将它们替换为包含数字的更新内容。

var regex = /(\d+)/,
    replacement = '<span>$1</span>';

function replaceText(el) 
    if (el.nodeType === 3) 
        if (regex.test(el.data)) 
            var temp_div = document.createElement('div');
            temp_div.innerhtml = el.data.replace(regex, replacement);
            var nodes = temp_div.childNodes;
            while (nodes[0]) 
                el.parentNode.insertBefore(nodes[0],el);
            
            el.parentNode.removeChild(el);
        
     else if (el.nodeType === 1) 
        for (var i = 0; i < el.childNodes.length; i++) 
            replaceText(el.childNodes[i]);
        
    


replaceText(document.body);

示例: http://jsfiddle.net/JVsM4/

这不会对现有元素及其关联的 jQuery 数据造成任何损害。


编辑:你可以用一点 jQuery 把它缩短一点:

var regex = /(\d+)/g,
    replacement = '<span>$1</span>';

function replaceText(i,el) 
    if (el.nodeType === 3) 
        if (regex.test(el.data)) 
            $(el).replaceWith(el.data.replace(regex, replacement));
        
     else 
        $(el).contents().each( replaceText );
    


$('body').each( replaceText );

示例: http://jsfiddle.net/JVsM4/1/

请注意,正则表达式需要 g 全局修饰符。

这样可能会慢一点,所以如果 DOM 很大,我会使用非 jQuery 版本。

【讨论】:

【参考方案3】:

只是大声思考,但你认为这会奏效吗?

document.body.innerHTML = document.body.innerHTML.replace(/(\d+)/g, "<span class='number'>$1</span>")

【讨论】:

@andreas 这似乎会抓住数字,但我只想在前面加上span。 1美元会取代号码吗? (我是 javascript 菜鸟) @ggwicz 它将所有数字 N 替换为 N,因此所有数字都包含在 中。我只是在这个页面上做了它,它确实会破坏一些东西。 :) @ggwicz 它将完全按照您的意愿进行操作 - 但不是追加和前置(只有对元素进行 DOM 操作才有可能)它会采用数字(作为字符串)然后前置 并附加 &lt/span>,然后将文档中的数字文本替换为上一个操作的结果 替换 document.body.innerHTML 是个坏主意。例如,它将销毁任何事件处理程序,例如.click() 谢谢大家。这个解决方案有效,但是,就像你说的那样,它使一些.click() 和我正在进行的.mouseenter() 事件崩溃了。 Patrick DW 的解决方案效果最好。【参考方案4】:

这完全取决于您的日期格式。

我发现这个网站有很多不同的正则表达式(因为你只是在一段普通的文本中搜索一个日期)。

如果这是您的日期格式(dd MMM yyyy),这似乎是一个不错的选择:http://regexlib.com/REDetails.aspx?regexp_id=405

我假设,因为它是一个模板,所以您的日期对于所有页面都是相同的。所以格式也是一样的。如果定义得当,您可以在模板上的每一段文本上使用正则表达式。

【讨论】:

感谢您的输入,但我要查找的不是格式化日期。只是数字,不一定是任何格式 谢谢大家 @Patrick DW 的解决方案效果很好。谢谢大佬!

以上是关于使用 jQuery 或 Javascript 在页面上选择数字的主要内容,如果未能解决你的问题,请参考以下文章

在页脚有 2 个按钮。右侧按钮离开页面jQuery移动

未捕获:Bootstrap 的 JavaScript 需要 jQuery

jQuery 选择器

jQuery 选择器

css 新手机菜单|在页脚中添加Javascript并更改电话号码,然后选择要使用的电子邮件链接在small.css中添加CSS并替换它

css 新手机菜单|在页脚中添加Javascript并更改电话号码,然后选择要使用的电子邮件链接在small.css中添加CSS并替换它