Javascript 仅当出现标记时,如何获取内部的值?

Javascript 仅当出现标记时,如何获取内部的值?,javascript,jquery,html,Javascript,Jquery,Html,我有一个HTML页面及其关联的js文件。其目的是将插入表中的数据转换为JSON文件。用户可以编辑表格单元格,然后单击按钮,以便Javascript文件解析数据,并将其作为Ajax请求发送到服务器上的PHP文件。然后,PHP文件将数据作为文件存储在服务器上,并将链接发回。 对于标记,我需要使用val而不是文本来获取所选的值。但是,val返回一个空字符串。如何使其正确返回值 var$TABLE=$'TABLE'; 变量$BTN=$'export-BTN'; var$EXPORT=$'EXPORT'

我有一个HTML页面及其关联的js文件。其目的是将插入表中的数据转换为JSON文件。用户可以编辑表格单元格,然后单击按钮,以便Javascript文件解析数据,并将其作为Ajax请求发送到服务器上的PHP文件。然后,PHP文件将数据作为文件存储在服务器上,并将链接发回。 对于标记,我需要使用val而不是文本来获取所选的值。但是,val返回一个空字符串。如何使其正确返回值

var$TABLE=$'TABLE'; 变量$BTN=$'export-BTN'; var$EXPORT=$'EXPORT'; $'.table add'.clickfunction{ var$clone=$TABLE.find'tr.hide'.clonetrue.removeClass'hide TABLE line'; $TABLE.find'TABLE'。追加$clone; }; $'.table remove'.clickfunction{ $this.parents'tr'.detach; }; $'.table up'。单击函数{ var$row=$this.parents'tr'; 如果$row.index==1返回;//不要超过标题 $row.get0之前的$row.prev; }; $'.table down'。单击函数{ var$row=$this.parents'tr'; $row.next.after$row.get0; }; //仅用于导出的几个jQuery帮助程序 jQuery.fn.pop=[].pop; jQuery.fn.shift=[].shift; $BTN.clickfunction{ //alertok; var$rows=$TABLE.find'tr:not:hidden'; var头=[]; var数据=[]; //获取标题在此处添加特殊标题逻辑 $$rows.shift.find'th:not:empty'。每个函数{ headers.push$this.text.toLowerCase; }; //将所有现有行转换为可循环数组 $rows.eachfunction{ var$td=$this.find'td'; var h={}; //使用前面的标题来命名哈希键 headers.forEachfunction头,i{ h[标题]=$td.eqi.val; 警报$td.eqi.val; }; data.push; }; //输出结果 normaldata=JSON.stringifydata; $.ajax{ 类型:POST,, url:filemaker.php, 数据:{data:normaldata}, 成功:函数输出{ var a=document.createElement'a'; a、 href='data.gmp' a、 下载=data.gmp; a、 点击; //我们到达这里; } }; }; .表格可编辑{ 位置:相对位置; } .table可编辑.glyph图标{ 字体大小:20px; } .表格移除{ 颜色:700; 光标:指针; } .表格移除:悬停{ 颜色:f00; } .桌子朝上,.桌子朝下{ 颜色:007; 光标:指针; } .桌子向上:悬停,.桌子向下:悬停{ 颜色:00f; } .附表{ 颜色:070; 光标:指针; 位置:绝对位置; 顶部:8px; 右:0; } .表格添加:悬停{ 颜色:0b0; } HTML5可编辑表 HTML5可编辑表 通过contenteditable的强大功能和一些简单的jQuery,您可以轻松创建自定义的可编辑表。现在不再需要健壮的JavaScript库了

导出哈希数组的可编辑表。动态编译来自标题的行 简单/强大的功能,如添加行、删除行、上移/下移行。 类型 医生 专业化 城市 地区 等级 药剂师 医生 炒菜 炒菜 炒菜 炒菜 A+ A. B C 药剂师 医生 炒菜 炒菜 炒菜 炒菜 A+ A. B C 导出数据


给定以下jQuery方法:

该方法主要用于获取表单元素的值,如input、select和textarea

该方法的结果是一个字符串,包含所有匹配元素的组合文本

对于每个表单元格,似乎要返回子单元格的val(如果存在),否则返回子单元格的文本

使用JavaScript,我们可以根据存在的文本或val来选择:

逻辑或|| expr1 | | expr2 如果可以将expr1转换为true,则返回expr1;否则,返回expr2

像这样:

$select.val() || $td.text()
下面是一个例子:

var$TABLE=$'TABLE'; 变量$BTN=$'export-BTN'; var$EXPORT=$'EXPORT'; $'.table add'.clickfunction{ var$clone=$TABLE.find'tr.hide'.clonetrue.removeClass'hide TABLE line'; $TABLE.find'TABLE'。追加$clone; }; $'.table remove'.clickfunction{ $this.parents'tr'.detach; }; $'.table up'。单击函数{ var$row=$this.parents'tr'; 如果$row.index==1返回;//不要超过标题 $row.get0之前的$row.prev; }; $'.table down'。单击函数{ var$row=$this.parents'tr'; $row.next.after$row.get0; }; //仅用于导出的几个jQuery帮助程序 jQuery.fn.pop=[].pop; jQuery.fn.shift=[].shift; $BTN.clickfunction{ //alertok; var$rows=$TABLE.find'tr:not:hidden'; var头=[]; var数据=[]; //获取标题在此处添加特殊标题逻辑 $$rows.shift.find'th:not:empty'。每个 作用{ headers.push$this.text.toLowerCase; }; //将所有现有行转换为可循环数组 $rows.eachfunction{ var$tds=$this.find'td'; var h={}; //使用前面的标题来命名哈希键 headers.forEachfunctionheader,i{ var$td=$tds.eqi; var$select=$td.find'select'; h[标题]=$select.val | |$td.text; console.logh[标题]; }; }; }; .表格可编辑{ 位置:相对位置; } .table可编辑.glyph图标{ 字体大小:20px; } .表格移除{ 颜色:700; 光标:指针; } .表格移除:悬停{ 颜色:f00; } .坐到桌上, .放下桌子{ 颜色:007; 光标:指针; } .上桌:悬停, .桌子放下:悬停{ 颜色:00f; } .附表{ 颜色:070; 光标:指针; 位置:绝对位置; 顶部:8px; 右:0; } .表格添加:悬停{ 颜色:0b0; } 类型 医生 专业化 城市 地区 等级 药剂师 医生 炒菜 炒菜 炒菜 炒菜 A+ A. B C 药剂师 医生 炒菜 炒菜 炒菜 炒菜 A+ A. B C 导出数据


您的算法$td.eqi的第一次返回是

<td contenteditable="true"> 
    <select> 
        <option value="pharmacist">Pharmacist</option>
        <option value="doctor">Doctor</option>
    </select>
</td>
并且不具有属性值,因此您具有空值

第二个值是

<td contenteditable="true">stir-fry</td>
它没有属性值,所以也返回null

只需使用文字,文字清晰。因为.text将只获取标记中的文本


我希望我能帮助和理解我所说的lol

.text和.val返回完全不同的数据段。第一个为您提供标记内的文本内容,另一个为value属性。@vlaz我知道,但问题是,为什么我得不到值?元素没有值。.val方法主要用于获取表单元素的值,如input、select和textarea。-@谢谢你。是否有任何解决方法可以从中的标记获取值?您可以…选择选择标记。问题已经回答。但是,对于内部不包含的标记,使用文本可以很好地工作。