我需要获取table对象ID为GroupInfoTable ,tr对象中样式包含addoffering_span_red的所有对象,然后找到对象的值及名称,
JS如下:
$("#GroupInfoTable tr .addoffering_span_red").each(function (i, item) {
var tr = $(item).parent().parent().siblings().children().eq(0).val(); //获取必填项的值
var str = $(item).parent().parent().siblings().children().eq(0); //获取必填项对象
}
HTML如下:
<table id="GroupInfoTable" class="formTableInput">
<tbody>
<tr>
<td class="labelTdWidth tdLabelBg">
<label><span class="addoffering_span_red">*</span>实验任务名:</label>
</td>
<td class="textTdWidth">
<input type="text" value="0828test3" style="" name="ClassName" id="ClassName">
</td>
</tr>
<tr>
<td class="labelTdWidth tdLabelBg">
<label><span class="addoffering_span_red">*</span>实验管理员:</label>
</td>
<td class="textTdWidth">
<input type="text" value="test105" class="InstructorWidthAll" name="Instructor" id="Instructor" style="display: none;">
<div contenteditable="true" style="width:221px" class="editDiv" id="_Instructor" autocomplete="off">
<span contenteditable="false" class="_Instructor_user">
<span contenteditable="false">test105</span>
</span>
</div>
</td>
</tr>
</tbody>
</table>
PS:蓝色的就是我想取得的对象,红色的就是对象的值,
现在取对象的值这句在火狐下有问题:
var tr = $(item).parent().parent().siblings().children().eq(0).val();
eg:
实验管理员的tr下面不仅有input标签,还有一个div元素,不知道这样方式能否取到值
--》eq(0).val();
在IE,谷歌,傲游都没问题,只有火狐有问题,请各位大神帮忙看看
var tr = $(item).parent().parent().siblings().children().eq(0).val();
----之前tr下面只有一个input的,所以可以这样取值,现在因为需求变动,实验管理员这行有所改动,tr下面的input后面还加了div,Jquery我不是很熟,不知道怎么改变才能取得实验管理员的对象值,也就是input里面的值
这个。。为啥不这么干呢:
$(item).parents('tr').find('input')
这样不是一下子就找到input了吗。
哎,好吧,怪我没描述情况,我只是贴了部分代码出来了,这个页面不确定显示多少行,是其他地方配置的,是否必填 也是不确定的,都需要在域里面配置才知道,所以tr和input不能作为条件,只好搜索带星号的某行数据,然后通过星号找到对应的对象及对象值,理解我意思吗?
@Sunny-午夜阳光: 没错啊, 星号你不是通过.addoffering_span_red查出来了吗。
然后不是用each在跑么。
那么每一个each都可以用向上找最近的tr然后再找input的方法回来啊。
@undefined:
大哥啊,貌似这句话有问题啊?结果是undefined~~o(╯□╰)o
$(item).parents('tr').find('input')
@Sunny-午夜阳光: 我这跑的很high吗。
我贴一段给你看看:
$("#GroupInfoTable tr .addoffering_span_red").map(function(){ return {description:$(this).parents('tr').find('label').text(),value:$(this).parents('tr').find('input').val()}; })
@undefined: 呵呵,写得很详细,我其实也是这样写的,不过我以为你把parents写错了,就把s去掉了。。。o(╯□╰)o 现在解决啦,问题考虑过多也不是好事啊,O(∩_∩)O谢谢你咯
@Sunny-懒阳阳:
<td class="textTdWidth">
<span name="wrapspan" style="margin-right: 2px; white-space: nowrap;">
<input type="text" value="" name="Instructor" id="Instructor" >
</span>
</td>
现在结构变成这样了,之前的方式不行了哦,还是取不到值,这个咋解决呢?
$(this).parents('tr').find('input').val();之前解决方式
@Sunny-懒阳阳: 是不是更简单了? 直接$(this).find('input')就OK了?
说实话没搞懂你的意思 ~
不过要取出红色的值很简单:
$("#GroupInfoTable tr .addoffering_span_red").each(function(i,item){ var tr = $(this).parent().parent().parent().find("input:eq(0)").val(); //获取必填项的值 });
其实看你的这个结构,直接搜索input不就得了???
$("#GroupInfoTable input").each(function(){});
还有,你在问题中贴出的【Js如下】,有问题,至少都缺少末尾的括号;然后你的html代码中,input标签没有结束标记~
哎,好吧,怪我没描述情况,我只是贴了部分代码出来了,这个页面不确定显示多少行,是其他地方配置的,是否必填 也是不确定的,都需要在域里面配置才知道,所以tr和input不能作为条件,只好搜索带星号的某行数据,然后通过星号找到对应的对象及对象值,理解我意思吗?
我贴的代码只是贴了关键部分,所以缺少括号和没结束标记之类的问题,在我这里是不存在的,是我没拷贝全
因为不确定会显示几行也不确定哪些数据是必填的,所以才以星号为判断条件,这样描述理解我意思吗?
见谅哈,表达能力不好
@Sunny-午夜阳光: 那你的代码基本是没什么问题的。如果FF不兼容,检查你的input标签,注意(标记需要封闭</input>),还不行,就用firebug调试下,很容易发现问题~
@幻天芒: 既然你可以通过*号判断必填,为啥不直接在input上加一个class=“required”呢?这样更简单的实现不是更好?
@幻天芒:
星号也是我加的啊。获取后台数据,里面有个字段判断某个值 是否为必填的依据,如果是必填则加星号。。。
火狐里面input不能直接<input type="text" />吗?
难道一定要写成<input type="text"></input>吗?
@Sunny-午夜阳光: 你这两个是一样的,关键是你贴的代码中不是这样的~
用firebug调试一下吧
调试没用,因为不会异常,只是“实验管理员”的值填写了,取的也是""
但实验任务名称的值可以取到的,因为两者的结构不一样,实验管理员的input下面还有div,我那个方式取不了