Pin*_*kie 15 javascript jquery jquery-selectors textnode
我想选择div元素中的文本并用<b>标签包装它.该<b>标签只能换到文本中的div和一个子元素中没有文本,如<p>在这个例子中标签.
<div>Testing
<p>Some more text inside p</p>
<p>asdasdasdasdasde p</p>
Test
</div>
Run Code Online (Sandbox Code Playgroud)
我可以<p>使用以下内容选择文本,但我无法做同样的事情div.我只想要文本div而不是p.在这种情况下,它应该选择并包装Testing和Test.
var x = $('p')[0].textContent; // this is not working for div.
console.log(x);
Run Code Online (Sandbox Code Playgroud)
Kob*_*obi 42
您可以使用contents,并按节点类型过滤(3表示文本节点):
$('div').contents()
.filter(function(){return this.nodeType === 3})
.wrap('<b />');
Run Code Online (Sandbox Code Playgroud)
示例:http://jsfiddle.net/nJqKq/8
另请参阅:MDC上的节点类型
小智 6
通过纯JS和DOM:
HTML:
<div id="test">Testing
<p>Some more text inside p</p>
<p>asdasdasdasdasde p</p>
Test
</div>
Run Code Online (Sandbox Code Playgroud)
JS:
getTextNodes(document.getElementById("test"));
function getTextNodes(parent)
{
var textNodes = [];
var nodes = parent.childNodes;
for(var i=0;i<nodes.length;i++)
{
if(nodes[i].nodeType === 3)
{
textNodes.push(nodes[i]);
wrapBold(nodes[i], parent);
}
}
}
function wrapBold(node, parent)
{
//check for whitespace text nodes
if(node.data.match(/[^\t\n\r ]/))
{
var bold = document.createElement("strong");
parent.insertBefore(bold, node);
bold.appendChild(node);
}else
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不想包装空节点,请使用以下命令:
$('div').contents()
.filter(function(){
return this.nodeType === 3 && this.data.trim().length > 0
}).wrap('<b />');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8475 次 |
| 最近记录: |