香草 Javascript 相当于 jQuery not()
Vanilla Javascript equivalent of jQuery not()
这就是我在 jQuery 中所做的:
var text2 = $(node).not("span").text();
console.log(text2);
如何在纯 javascript 中做同样的事情?
我知道如何获取 javascript 中的元素,但不知道如何忽略元素和 select 其余
var spans = node.getElementsByTagName('span');
我需要获取 node
中不包含 <span>
的每个元素
这是我的 HTML
<tr>
<td>
<span>Farley</span>
<div class="table-row__expanded-content">
<data-key>Sex: </data-key> <data-value>Male</data-value><br />
<data-key>DOB: </data-key> <data-value>12/08/2010</data-value> <br />
<data-key>Weight: </data-key> <data-value>20 lbs</data-value> <br />
<data-key>Location: </data-key> <data-value>Kennel 2B</data-value> <br />
<data-key>Temperament: </data-key> <data-value>Aggresive</data-value> <br />
<data-key>Allergies: </data-key> <data-value>Sulfa, Penicillin, Peanuts</data-value>
</div>
</td>
<td>Cunningham, Stephanie</td>
<td>Dog</td>
<td>Pomeranian</td>
<td>PQRST1234567</td>
</tr>
var notSpans = document.getElementsByTagName('div')[0].querySelectorAll(':not(span)');
for (var i = 0; i < notSpans.length; i++) {
notSpans[i].style.color = 'green';
}
<div>
<p>not a span</p>
<span>a span</span>
</div>
或在此页面的控制台中运行的快速示例:
var startNode = jQuery("li.related-site").get(0); // quick jQ to get a testable node.
var spanLess = [];
var child = startNode.firstChild;
while(child){
if(child.nodeType == 1){
var anySpans = child.getElementsByTagName('span');
if(!anySpans.length) spanLess.push(child);
}
child = child.nextSibling;
}
spanLess;
根据您的评论,您正在尝试提取用于 tablesorter 的值,您可能还发现有用的功能是从节点中提取文本值而不考虑标记:
function extractText(node){
if(node.nodeType == 3) return node.nodeValue.trim();
if(node.nodeType == 1){
var buf = [];
var child = node.firstChild;
while(child){
var val = extractText(child);
if(val) buf.push(val);
child = child.nextSibling;
}
return buf.join(' ');
}
return '';
}
感谢 bknights,我能够修改他的答案以满足我的需要。
我的完整功能如下:
var myTextExtraction = function (node) {
//console.log(node);
var child = node.firstChild;
while (child) {
if (node.getElementsByTagName('span').length) {
childValue = child.nextSibling.innerHTML;
console.log(childValue);
}
else {
childValue = child.nodeValue
console.log(childValue);
}
return childValue;
}
}
然后我使用 tablesorter 插件创建 node
对象:
// Load the table sorter
$(".table").tablesorter(
{
textExtraction: myTextExtraction
}
);
这将循环并输出 <td><span>mytext</span></td>
中的文本以及 <td>myothertext<td>
中的文本。我将其用于 jquery TableSorter 插件以处理 <td>
s
中的复杂数据
这就是我在 jQuery 中所做的:
var text2 = $(node).not("span").text();
console.log(text2);
如何在纯 javascript 中做同样的事情?
我知道如何获取 javascript 中的元素,但不知道如何忽略元素和 select 其余
var spans = node.getElementsByTagName('span');
我需要获取 node
中不包含 <span>
这是我的 HTML
<tr>
<td>
<span>Farley</span>
<div class="table-row__expanded-content">
<data-key>Sex: </data-key> <data-value>Male</data-value><br />
<data-key>DOB: </data-key> <data-value>12/08/2010</data-value> <br />
<data-key>Weight: </data-key> <data-value>20 lbs</data-value> <br />
<data-key>Location: </data-key> <data-value>Kennel 2B</data-value> <br />
<data-key>Temperament: </data-key> <data-value>Aggresive</data-value> <br />
<data-key>Allergies: </data-key> <data-value>Sulfa, Penicillin, Peanuts</data-value>
</div>
</td>
<td>Cunningham, Stephanie</td>
<td>Dog</td>
<td>Pomeranian</td>
<td>PQRST1234567</td>
</tr>
var notSpans = document.getElementsByTagName('div')[0].querySelectorAll(':not(span)');
for (var i = 0; i < notSpans.length; i++) {
notSpans[i].style.color = 'green';
}
<div>
<p>not a span</p>
<span>a span</span>
</div>
或在此页面的控制台中运行的快速示例:
var startNode = jQuery("li.related-site").get(0); // quick jQ to get a testable node.
var spanLess = [];
var child = startNode.firstChild;
while(child){
if(child.nodeType == 1){
var anySpans = child.getElementsByTagName('span');
if(!anySpans.length) spanLess.push(child);
}
child = child.nextSibling;
}
spanLess;
根据您的评论,您正在尝试提取用于 tablesorter 的值,您可能还发现有用的功能是从节点中提取文本值而不考虑标记:
function extractText(node){
if(node.nodeType == 3) return node.nodeValue.trim();
if(node.nodeType == 1){
var buf = [];
var child = node.firstChild;
while(child){
var val = extractText(child);
if(val) buf.push(val);
child = child.nextSibling;
}
return buf.join(' ');
}
return '';
}
感谢 bknights,我能够修改他的答案以满足我的需要。
我的完整功能如下:
var myTextExtraction = function (node) {
//console.log(node);
var child = node.firstChild;
while (child) {
if (node.getElementsByTagName('span').length) {
childValue = child.nextSibling.innerHTML;
console.log(childValue);
}
else {
childValue = child.nodeValue
console.log(childValue);
}
return childValue;
}
}
然后我使用 tablesorter 插件创建 node
对象:
// Load the table sorter
$(".table").tablesorter(
{
textExtraction: myTextExtraction
}
);
这将循环并输出 <td><span>mytext</span></td>
中的文本以及 <td>myothertext<td>
中的文本。我将其用于 jquery TableSorter 插件以处理 <td>
s