Подтвердить что ты не робот

GetElementsByClassName не работает

Я закодировал php-страницу, которая аккуратно отображает информацию из базы данных mysql в таблицы. Я хотел бы скрыть пустые строки таблицы обработчиком события onLoad.

Вот пример таблицы с кодом, который скрывает <td>, когда у него нет содержимого. но я могу заставить его работать с разными идентификаторами:

        <script type="text/javascript">
        function hideTd(id){
            if(document.getElementById(id).textContent == ''){
              document.getElementById(id).style.display = 'none';
            }
          }
        </script>
        </head>
        <body onload="hideTd('1');hideTd('2');hideTd('3');">
        <table border="1">
          <tr>
            <td id="1">not empty</td>
          </tr>
          <tr>
            <td id="2"></td>
          </tr>
          <tr>
            <td id="3"></td>
          </tr>
        </table>
    </body>

то, что я хочу сделать, это использовать класс для <td> для достижения того же самого, но только ссылаясь на класс один раз, и не ссылаясь на каждый отдельный id, который я хочу удалить, что даже не будет работать для моего динамического содержимого, Я пробовал использовать этот код:

    <script type="text/javascript">
    function hideTd(){
        if(document.getElementsByClassName().textContent == ''){
          document.getElementsByClassName().style.display = 'none';
        }
      }
    </script>
    </head>
    <body onload="hideTd('1');">
    <table border="1">
      <tr>
        <td class="1">not empty</td>
      </tr>
      <tr>
        <td class="1"></td>
      </tr>
      <tr>
        <td class="1"></td>
      </tr>
    </table>
</body>

но это не сработает. его предполагается скрыть пустой <td>, который имеет указанный класс. как скрыть пустые <td> с помощью классов, а не идентификаторов?

4b9b3361

Ответ 1

Есть несколько проблем:

  • Имена классов (и идентификаторы) не могут начинаться с цифры.
  • Вы должны передать класс getElementsByClassName().
  • Вам нужно повторить набор результатов.

Пример (непроверенный):

<script type="text/javascript">
function hideTd(className){
    var elements = document.getElementsByClassName(className);
    for(var i = 0, length = elements.length; i < length; i++) {
       if( elements[i].textContent == ''){
          elements[i].style.display = 'none';
       } 
    }

  }
</script>
</head>
<body onload="hideTd('td');">
<table border="1">
  <tr>
    <td class="td">not empty</td>
  </tr>
  <tr>
    <td class="td"></td>
  </tr>
  <tr>
    <td class="td"></td>
  </tr>
</table>
</body>

Обратите внимание, что getElementsByClassName() недоступен до IE8 включая IE8.

Update:

В качестве альтернативы вы можете предоставить таблице идентификатор и использовать:

var elements = document.getElementById('tableID').getElementsByTagName('td');

чтобы получить все элементы td.

Чтобы скрыть родительскую строку, используйте свойство parentNode элемента:

elements[i].parentNode.style.display = "none";

Ответ 2

Если вы хотите сделать это с помощью ClassName, вы можете сделать:

<script type="text/javascript">
function hideTd(className){
    var elements;

    if (document.getElementsByClassName)
    {
        elements = document.getElementsByClassName(className);
    }
    else
    {
        var elArray = [];
        var tmp = document.getElementsByTagName(elements);  
        var regex = new RegExp("(^|\\s)" + className+ "(\\s|$)");
        for ( var i = 0; i < tmp.length; i++ ) {

            if ( regex.test(tmp[i].className) ) {
                elArray.push(tmp[i]);
            }
        }

        elements = elArray;
    }

    for(var i = 0, i < elements.length; i++) {
       if( elements[i].textContent == ''){
          elements[i].style.display = 'none';
       } 
    }

  }
</script>