30

私はhtmlページを持っています.htmlは次のようにレンダリングされます:

<div id = 'mViB'>
<table id = 'myTable'>
<tbody>
<tr> ...</tr>
<tr>...</tr>
<tr> ...</tr>
<tr>....</tr>
<tr>
<td>
<label id="*spaM4" for="*zigField4">
All hell.
<span class = 'msde32'></span>
</label>
</td>
</tr>
</tbody>
</table>
</div>

今、私がやりたいことは、ラベル テキスト 'All hell.' を取得することです。ラベルから。

その目的のために、私は両方を使用しました:document.getElementById('*spaM4').textそしてdocument.getElementById('*spaM4').value 、偶然にも、それらのどれも機能しませんでした。

私は使用document.getElementById('*spaM4').innerHTML しましたが、それも返さspan classれますが、テキストを取得したいだけです。

残念ながら、要素 ID のアスタリスクはサード パーティのコードであり、変更できません。

ラベルテキストを取得するための他の方法を提案できますか?

4

7 に答える 7

6

innerText/を使用textContent:

  var el = document.getElementById('*spaM4');
  console.log(el.innerText || el.textContent);

フィドル: http://jsfiddle.net/NeTgC/2/

于 2013-07-30T09:23:45.307 に答える
3

この例のように、データ要素がラベル内にある場合:

<label for="subscription">Subscription period
    <select id='subscription' name='subscription'>
        <option></option>
        <option>1 year</option>
        <option>2 years</option>
        <option>3 years</option>
    </select>
</label>

以前のすべての回答は、予期しない結果をもたらします。

「購読期間


                    1年
                    2年
                    3年

            "

期待される結果は次のようになります。

「購読期間」

したがって、正しい解決策は次のようになります。

const label = document.getElementById('yourLableId');
const labelText = Array.prototype.filter
    .call(label.childNodes, x => x.nodeName === "#text")
    .map(x => x.textContent)
    .join(" ")
    .trim();
于 2019-02-18T17:58:50.210 に答える