2014-09-10 58 views
0

我想要一種方法來獲取第一個數值存在於一個表(和各自的tbody)內,但它需要能夠找到第一個數字的值,並忽略所有標籤,直到達到數字值。獲取表中的後裔的第一個數字值

<table id="TableID"> 
    <thead></thead> 
    <tbody> 
     <tr></tr> 
     <tr> 
      <td></td> 
      <td> 
       <div> 
        <div> 
         <span> 
          4031007 
         </span> 
        </div> 
        <div> 
         <span> 
          whatever 
         </span> 
        </div> 
       </div> 
      </td> 
      <td></td> 
     </tr> 
    </tbody> 
</table> 
在上面的例子中

,我們會去找4031007,這是一個<span>內,但它可能已經是一個<div>或別的東西。我需要這個,而不使用JQuery。任何幫助?

+0

用空格拆分table的'textContet',迭代結果數組,直到找到數字。 – Teemu 2014-09-10 17:39:09

回答

0

你可以做普通的老辦法:讓一個遞歸函數將返回具有文本內容的第一個節點的文本:

function findFirstNumber(node) { 
    // If this is a text node, return its contents. Trim it because there is 
    // whitespace between the elements that should be ignored 
    if (node.nodeType == Node.TEXT_NODE) 
     return node.textContent.trim(); 

    // Iterate over all child nodes and finde the first one that has text in it 
    for (var child = node.firstChild; child; child = child.nextSibling) { 
     var content = firstText(child); 
     if (content && isNumber(content)) 
      return content; 
    } 

    // No text found 
    return ''; 
} 

function isNumber(value) { 
    return !!isNaN(value); 
} 

console.log(findFirstNumber(document.getElementById('TableID'))); 

我用mdn page about Node找出如何做到這一點。

see fiddle(打開控制檯)

+1

要檢查它是否是數字而不是字符串,請使用!isNaN(content)。如果這返回false然後繼續迭代。 – RichieAHB 2014-09-10 17:52:37

0

如何接受正則表達式一個奇特的查找功能。

function findRegExp(start, reg, mod) { 
    if (! (reg && start)) return this; 

    return [].slice.call(start.querySelectorAll('*')).filter(function(elem) { 
     if (typeof reg == 'string') 
      reg = new RegExp(reg, mod ? mod : ''); 

     var clone = elem.cloneNode(true), 
      child = clone.children; 

     for (var i=child.length; i--;) 
      clone.removeChild(child[i]); 

     var txt = clone.textContent.trim(); 

     return reg.test(txt); 
    }); 
} 

var elems = findRegExp(document.getElementById('TableID'), /^\d+$/); 

FIDDLE

和jQuery的版本中使用

$.fn.findRegExp = function(reg, mod) { 
    if (!reg) return this; 
    return this.find('*').addBack().filter(function() { 
     if (typeof reg == 'string') 
      reg = new RegExp(reg, mod ? mod : ''); 
     var c = $(this).clone(); 
     c.children().remove(); 
     var txt = $.trim(c.text()); 

     return reg.test(txt); 
    }); 
} 

然後你就可以搜索包含的元素只有數字

$('#TableID').findRegExp(/^\d+$/); 

FIDDLE

相關問題