转义onclick生成的HTML具有带有CSS属性选择器的jQuery函数
Escaping generated HTML that onclick has a jQuery function with CSS attribute selector
我有在 JavaScript 中生成 HTML 的机制,我需要扩展此机制以添加删除行按钮。
行生成机制如下所示:
debug.createOverrideRow = function (override) {
var rowStr = "";
if (override.AutoDisplay) {
rowStr += "<tr session-key='"" + override.SessionKey + "'" ";
} else {
rowStr += "<tr class='"hide'" session-key='"" + override.SessionKey + "'" ";
}
rowStr += "session-key-data-type='"" + override.DataType + "'">";
rowStr += "<td id='"tdDisplayName" + i + 1 + "'">" + override.DisplayName + "</td>";
rowStr += "<td id='"tdValue" + i + 1 + "'">";
switch (override.DataType) {
case "NullableInteger":
case "Integer":
case "rowString":
rowStr += "<input type='"text'" onChange='"common.validateField(this, " + override.ValidationPattern + ")'" onBlur='"common.validateField(this, " + override.ValidationPattern + ")'" />";
break;
case "Array":
rowStr += "<input type='"text'"/>";
break;
case "Date":
rowStr += "<input class='"datePicker'" placeholder='"yyyy-mm-dd'" type='"text'" onChange='"common.validateDate(this)'" onBlur='"common.validateDate(this)'" />";
break;
case "Boolean":
rowStr += "<input type='"checkbox'"/>";
break;
case "Radio":
var inputs = override.InputList.split(";");
rowStr += "<div>";
for (var j = 0; j < inputs.length; j++) {
var elements = inputs[j].split(":");
rowStr += "<input id='"rad" + j + "'" name='"" + override.SessionKey + "'" type='"radio'" value='"" + elements[0] + "'" /> " + elements[1] + " ";
}
rowStr += "</div>";
break;
}
rowStr += "</td>";
rowStr += "</tr>";
return rowStr;
}
应该注入删除按钮的机制:
debug.injectRemoveButtonIntoOverrideRow = function (override, row) {
$(row).find('td:last').append("<input type='"button'" value = '"Remove'" onClick='"$('tr[session-key='"" + override.SessionKey + "'"]').remove();'" />");
}
网页示例:
<tr session-key="data.SampleId" session-key-data-type="NullableInteger"><td id="tdDisplayName71">Sample Id</td><td id="tdValue71"><input type="text"><input type="button" value="Remove" onclick="$(" tr[session-key="data.SampleId" ]').remove();'=""></td></tr>
是否可以转义引号以便这样做?
根据@Shilly的建议,我已将选择器移动到一个函数中:
debug.injectRemoveButtonIntoOverrideRow = function (override, row) {
var cleanedSessionKey = override.SessionKey.replace(/[^a-zA-Z0-9]/g, "");
$(row).find('td:last').append("<script type='"text/javascript'"> function remove" + cleanedSessionKey + "(){ $('tr[session-key='"" + override.SessionKey + "'"]').remove(); }</script><input type='"button'" value = '"Remove'" onClick='"remove"+cleanedSessionKey+"()'" />");
}
相关文章:
- 获取HTML属性中CSS声明的值
- 谷歌图表-如何更改整个表的css属性
- 如何通过HTML+CSS中的另一个元素Selector更改元素的属性值
- Css order属性不't在Jquery设置时更新
- CSS中的游标属性似乎不适用于USB On The Go
- 重写CSS:使用jquery显示none属性
- CSS样式属性留空
- 如何在CSS或Javascript中定位选定的属性(在HTML选项中)
- 从CSS到Javascript的属性值
- Android在HTML容器中滚动,该容器具有CSS溢出属性
- 将css属性替换为变量
- 使用Jquery/Javascript替换CSS属性
- 带有CSS的数据属性就没那么有用了
- 如何使用JavaScript查找未定义的CSS属性的值
- 在jquerymobile中设置按钮css属性的动画
- 使用javascript和css选择器获取value属性的内容
- JavaScript无法提取引号css属性
- 使用AngularJS动态更改css属性
- 使用javascript获取具有特定CSS属性的所有元素
- 将css属性添加到对象的集合中