如何使用jQuery获取,操作和替换文本节点?

时间:2010-10-28 19:26:54

标签: javascript jquery string

这是我的代码:

<li class="det_price">
    <a href="/designer/customize/278258?dpid=1">Printing</a> from $10 
</li>

我在任何给定的页面上都有大约15个这样的块,我想取文本节点(从$ X开始),使用正则表达式选择X并将其设置为数值变量,然后将其乘以a %,并将其附加到原始节点。例如,如果原始节点说“从10美元起”,我想用“从10美元到2.60美元”替换它。我可以在单个节点上使用replace()和正则表达式来做到这一点,但是我无法使用jQuery迭代所有这些。我可以将这样的转换应用于jQuery对象,还是需要以某种方式转换它然后使用标准的Javascript函数?

谢谢!

3 个答案:

答案 0 :(得分:3)

Here's how to select a text node.

这是(你的骨架)一旦你得到它们你会做什么:

$('li.det_price').contents().filter(function()
{ 
    return this.nodeType == 3;
}).text(function (i, text)
{
    return text.replace(/* your schtuff here */);
});

因此,显然jQuery不能很好地与文本节点

一起使用

得到(有点)hacky的时间:

var rnotwhite = /\S/; // to omit text nodes that are solely white space
                      // tweak this as needed
$('li.det_price').contents().filter(function()
{ 
    return this.nodeType === 3 && rnotwhite.test($(this).text());
}).text(function (i, text)
{
    this.replaceWholeText(text + ' replaced');
    // or, for more cross-browser-ness
    // this.nodeValue = text + ' replaced';
});

--> Check out this sweet demo <--

--> IE-compatible demo here <--

现在就是这笔交易:如果你能控制标记,那么最佳解决方案是将你真正感兴趣的文本节点包装在{ {1}} s,像这样:

<span>

然后你可以这样做(方式少草图,IMO):

<li class="det_price">
  <a href="/designer/customize/278258?dpid=1">Printing</a><span> from $10</span>
</li>

--> More demo goodness <--

答案 1 :(得分:0)

您需要使用每个功能:

$("li.det_price a").each(function(index, Element){
   //Element holds the current anchor, manipulate it's contents at will
   $("Element").val("some new value...");
})

答案 2 :(得分:0)

$("li.det_price a").text()会得到那个LI的文本(不幸的是,它带有该类引用的所有LI节点)。要获得特定LI的文本,您必须为其提供ID,或者找到其他方法来唯一地识别它。

一旦你确定了它唯一的标识,你可以简单地在.text()括号中添加一个字符串来改变它的含义。例如,

$("li.det_price a").text('Not Printing')会将您上面的文字从“打印”更改为“不打印”。