Получить данные определенного <td>в таблице - PullRequest
2 голосов
/ 03 ноября 2008

Мне нужно получить данные определенного <td>, но у меня нет id или name для этого конкретного <td>. Как вы получаете содержимое этого <td>?

Например:

<table>
  <tr><td>name</td><td>praveen</td></tr>
  <tr><td>designation</td><td>software engineer</td></tr>
</table>

Можно ли получить значение "обозначение" из этой таблицы ... Мне нужно извлечь слово "инженер-программист", используя javascript.

Ответы [ 5 ]

3 голосов
/ 03 ноября 2008

Я предпочитаю использовать jQuery, чтобы выполнить всю тяжелую работу для такого рода задач.

Например, следующая функция вернет текст следующего элемента того же типа, который вы ищете:

function GetNextChildText(tagToFind, valueToFind) {
    var nextText = "";
    $(tagToFind).each(function(i) {
        if ($(this).text() == valueToFind) {
            if ($(this).next() != null && $(this).next() != undefined) {
                nextText = $(this).next().text();
            }
        }
    });
    return (nextText);
}

Итак, для вашего примера таблицы ваш запрос на возврат обозначения может быть:

var designationText = GetNextChildText('td', 'designation');

И в результате переменная designationText будет содержать значение «инженер-программист».

2 голосов
/ 03 ноября 2008

Быстрое решение:

function GetTdContent(label)
{
  var TDs = document.getElementsByTagName("TD");
  var foundFlag = false;

  for (i = 0; i < TDs.length; i++)
  {
    if (foundFlag) return TDs[i].innerHTML;
    foundFlag = TDs[i].innerHTML.toLower() == label.toLower(); 
  }
}

в другом месте позвоните:

var value = GetTdContent("designation");

Пояснение:

Функция выполняет итерации всех TD в документе. Если он находит один с заданной меткой, скажем «обозначение», он повторяется еще раз и возвращает следующее содержимое TD.

Это делает несколько предположений о вашем исходном HTML. Если вы знаете свои данные, этого может быть достаточно.

1 голос
/ 03 ноября 2008

Что-то вроде:
(не проверено, просто быстрый код, чтобы дать идею)

var tables = document.getElementById('TABLE'); // instead of document.all.tag
var rows;
var cells;
var maxCells = 1;
var designation;
if (tables) {
    for (var t=0; t<tables.length; t++) {
        rows = tables[t].all.tags('TR');
        if (tables[t].all.tags('TABLE').length == 0) {
            for (var r=0; r<rows.length; r++) {
                if (rows[r].innerText != '') {
                    cells = rows[r].all.tags('TD');
                    for (var c=0; c<cells.length; c++) {
                        if (cells[c].innerText == 'designation' && c<(cells.length-1)) {
                            designation = cells[c+1].innerText;
                        }
                    }
                }
            }
        }
    }
}

Так как document.all является специфичным для IE, вам лучше использовать getElementById, чтобы переопределить эту функцию для IE :

if (/msie/i.test (navigator.userAgent)) //only override IE
{
    document.nativeGetElementById = document.getElementById;
    document.getElementById = function(id)
    {
        var elem = document.nativeGetElementById(id);
        if(elem)
        {
            //make sure that it is a valid match on id
            if(elem.attributes['id'].value == id)
            {
                return elem;
            }
            else
            {
                //otherwise find the correct element
                for(var i=1;i<document.all[id].length;i++)
                {
                    if(document.all[id][i].attributes['id'].value == id)
                    {
                        return document.all[id][i];
                    }
                }
            }
        }
        return null;
    };
}
0 голосов
/ 03 ноября 2008

Томалак немного быстрее:

<script type="text/javascript">
function getText(tText){
  var tds = document.getElementsByTagName("td");
  for(var i=0, im=tds.length; im>i; i++){
    if(tds[i].firstChild.nodeValue == tText)
      return tds[i].nextSibling.firstChild.nodeValue;
  }
}
</script>
0 голосов
/ 03 ноября 2008

Использовать XPath (учебник здесь, включая инструкции для IE и других браузеров: http://www.w3schools.com/XPath/xpath_examples.asp)

xpath для вашего примера

// таблица / тр / тд [Текст () = "обозначение"] / следующий :: тд

(«тд, следующий за тд с текстом« обозначение », который находится в тр, который находится где-то в документе»)

Возможны более простые пути Xpath - если это единственная ячейка таблицы, которая может содержать «обозначение», вы можете использовать

// тд [текст () = "обозначение"] / следующий :: тд

Одна из проблем, возникающих при написании кода для конкретного поиска, заключается в том, что его нужно изменить, возможно, значительно, если изменится структура вашей страницы. Xpath может вообще не нуждаться в изменении, и если это так, то это всего одна строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...