在输入字段之前提取表格单元格中的文本

时间:2013-11-27 15:59:54

标签: javascript jquery

我有一些表格的HTML: -

<table>
  <tr>
    <td>Text for input 1<br/><div>Lots of textual data</div><input id="field1" class="mandatory"/></td>
    <td>Text for input 2<br/><input id="field2" class="mandatory"/></td?
    <td>Text for input 3<br/><input id="field3"/></td>
  </tr>
</table>

(但还有更多字段和行)。

我正在遍历强制类,并且在输入字段为空的情况下,我想显示<br/>之前的文本,而不是其他任何内容。

使用: -

$(this).parent().text();

仅适用于某一点,因为它还会在<div>

中显示文字

有没有办法可以将文字限制在<br/>之前的文字?

4 个答案:

答案 0 :(得分:2)

我认为你要找的是.contents()

$(this).parent().contents().eq(0).text();

演示:Fiddle

答案 1 :(得分:0)

您可以更新HTML标记,以使用特殊的css类将您的消息保存在span标记中,您可以使用它来更轻松地选择jQuery。

<table>
  <tr>
    <td><span class="msg">Text for input 1</span><br/>
        <div>Lots of textual data</div><input id="field1" class="mandatory"/>
    </td>
  </tr>
</table>

现在使用closest方法获取父td并使用find方法获取范围

$(".mandatory").each(function(index,item){

     var msg=$(this).closest("td").find("span.msg").html();
     //do something with msg now 
});

以下是工作示例http://jsbin.com/oDUPujOl/1/

答案 2 :(得分:0)

您可以clone您的目标TDremove elements带有不必要的文字。现在,您可以轻松地从required text获取TD。如需参考,请阅读:.clone()

试试这个,

$("#field1").keyup(function(){
    var xClone = $(this).parent().clone();
    xClone.find('div').remove();
    alert((xClone).text());
});

DEMO

答案 3 :(得分:0)

一些普通JS的时间,因为jQuery与textnodes不太匹配:

var text = this.parentNode.firstChild.nodeValue.trim();

FIDDLE