使用javascript从单元格中检索id

时间:2013-05-02 16:03:59

标签: javascript

我需要检索只有id文字内容的<td>的{​​{1}}。

例如:

<td>

如果我知道文本“Hello world”,是否可以检索..... <tr> <td id='hey'>Hello world!</td> </tr> .... 的{​​{1}}?

/ * **** / 感谢所有人!我会尽快尝试提供的解决方案!!只是为了解释我正在使用OBIEE 11g而我正在尝试编写一个脚本来将格式条件添加到不支持的总计。直到现在我想出了这个解决方案:

id

因此,在这种情况下,如果数字高于阈值,则总计将被着色。 我请求您的帮助尝试定义要在数组中搜索的列,以使其对用户更简单。我的意思是如果用户想要格式化名为Turnover的列,它将在脚本中添加他需要的列。

我会尝试你的建议! 我会告诉你的!

干杯!

6 个答案:

答案 0 :(得分:5)

这是一个解决方案,它只匹配完全匹配而不仅仅包含文本,此搜索在第一次匹配后不会停止,但会一直持续到没有更多要搜索的元素

HTML

<table>
    <thead></thead>
    <tbody>
        <tr>
            <td id='hey'>Hello world!</td>
            <td id='hey2'>Hello world 2!</td>
            <td id='hey3'>Hello world 3!</td>
        </tr>
    </tbody>
</table>

的Javascript

var search = "Hello world!";

Array.prototype.forEach.call(document.getElementsByTagName("td"), function (td) {
    if (td.textContent === search) {
        alert(td.id);
    }
});

jsfiddle

如果您希望解决方案在文本中进行搜索并在第一次匹配后停止,那么您可以执行此操作

var search = "Hello world!";

Array.prototype.some.call(document.getElementsByTagName("td"), function (td) {
    if (td.textContent.indexOf(search) !== -1) {
        alert(td.id);
        return true;
    }

    return false;
});

jsfiddle

答案 1 :(得分:2)

试试这个:

Demo

var searchString = "Hello world!";
var tds = document.getElementsByTagName("td");

[].forEach.call(tds, function (td) {
    if (td.textContent.indexOf(searchString) > -1) { // For exact match use td.textContent === searchString 
        alert(td.id);
    }
});

请参阅兼容性:

答案 2 :(得分:2)

是的,我的“没有JQuery”非常粗糙,但这里有:

var matchedId;

var elements = document.getElementsByTagName("td");

for(var i = 0; i < elements.length; i++){
   var element = elements[i];
   if(element.innerHTML.indexOf("Hello world!") != -1){
      matchedId = element.id;
      break;
   }
}

Here is a working example

答案 3 :(得分:2)

jQuery提供:contains选择器:

$('td:contains("Hello world!")')[0].id

如果不这样做,你需要手动完成:

var tds = document.getElementsByTagName('td');
var id;

outer: for(var i = 0; i < tds.length; i++) {
    var td = tds[i];

    for(var j = 0; j < td.childNodes.length; j++) {
        var child = td.childNodes[j];

        if(child.nodeType === 3 && child.nodeValue.indexOf('Hello world!') !== -1) {
            id = td.id;
            break outer;
        }
    }
}

请注意,如果您不希望与:contains具有相同级别的兼容性,请检查td.textContent.indexOf('Hello, world!')

答案 4 :(得分:1)

您可以执行以下操作:

var tdarr = document.getElementsByTagName("td");

for (var i = 0; i < tdarr.length; i++) {
    if (tdarr[i].innerHTML === "Hello world!") {
        alert(tdarr[i].id);
    }
}

JSFiddle

答案 5 :(得分:0)

好的伙计们! 感谢大家,我使用了你的代码,并以这种方式实现了我的目标:

for(var td =0; td < tds.length;td++){
    //alert(tds[td].textContent);
    if(tds[td].textContent == colonna[0]){
        var id = tds[td].id;
        var numcol = id.substring(id.lastIndexOf("_")+1,id.length);
        colonna[4] = parseInt(numcol);
        td = tds.length;
    }
}

感谢您的建议!!

干杯!