Javascript - Regex:如何用相同的id加数字替换字符串中的id
Javascript - Regex : How to replace id in string with the same id plus number?
我有一个包含多个元素的字符串,id如下:
var data = "<div id='1'></div><input type='text' id='2'/>";
现在我使用这个正则表达式来查找字符串中的所有id:
var reg = /id="([^"]+)"/g;
之后我想用一个新的id替换所有那些id。像这样:
data = data.replace(reg, + 'id="' + reg2 + '_' + numCompare + '"');
我想要reg2
,如上所示,返回id的值。我不太熟悉正则表达式,所以我该怎么做呢?
不使用regex,而是解析它并遍历元素。试一试:
var data = "<div id='1'></div><div id='asdf'><input type='text' id='2'/></div>",
numCompare = 23,
div = document.createElement("div"),
i, cur;
div.innerHTML = data;
function updateId(parent) {
var children = parent.children;
for (i = 0; i < children.length; i++) {
cur = children[i];
if (cur.nodeType === 1 && cur.id) {
cur.id = cur.id + "_" + numCompare;
}
updateId(cur);
}
}
updateId(div);
演示:http://jsfiddle.net/RbuaG/3/
检查id
是否首先设置,然后才会修改它。
此外,它是安全的,在情况下,HTML包含一个评论节点(IE 6-8在.children
确实包括评论节点)。
同时遍历所有元素的所有子元素。在您的示例中,您只有一层元素(没有嵌套)。但在我的小提琴中,我嵌套了<input />
,它仍然被修改。
使用div.innerHTML
获取更新后的HTML。
var data = "<div id='1'></div><div id='asdf'><input type='text' id='2'/></div>",
numCompare = 23,
div = $("<div>"),
i, cur;
div.append(data);
div.find("[id]").each(function () {
$(this).attr("id", function (index, attr) {
return attr + "_" + numCompare;
});
});
演示:http://jsfiddle.net/tXFwh/5/
虽然id
以和/或数字开头是有效的,但您应该将元素的id
更改为普通标识符。
引用:
-
.children
: https://developer.mozilla.org/en-US/docs/DOM/Element.children -
.nodeType
: https://developer.mozilla.org/en-US/docs/DOM/Node.nodeType -
jQuery.find()
: http://api.jquery.com/find/ -
jQuery.attr()
: http://api.jquery.com/attr/ -
jQuery.each()
: http://api.jquery.com/each/
尝试使用
.replace(/id='(.*?)'/g, 'id="$1_' + numCompare + '"');
Regex可能不是正确的方法,这里有一个使用jQuery的例子:
var htmlstring = "<div id='1'></div><input type='text' id='2'/>";
var $dom = $('<div>').html(htmlstring);
$('[id]', $dom).each(function() {
$(this).attr('id', $(this).attr('id') + '_' + numCompare);
});
htmlstring = $dom.html();
示例:http://jsfiddle.net/fYb3U/
使用jQuery。
var data = "<div id='1'></div><input type='text' id='2'/>";
var output = $("<div></div>").html(data); // Convert string to jQuery object
output.find("[id]").each(function() { // Select all elements with an ID
var target = $(this);
var id = target.attr("id"); // Get the ID
target.attr("id", id + "_" + numCompare); // Set the id
});
console.log(output.html());
这比在HTML上使用regex要好得多(使用正则表达式解析HTML:为什么不呢?),更快(尽管可以通过比$("[id]")
更直接的选择器进一步改进,例如给元素一个类)。
小提琴:http://jsfiddle.net/georeith/E6Hn7/10/
相关文章:
- 如果元素's的ID以数字开头
- javascript从id获取数字
- 如何为每个带有数字的id元素使用Javascript函数
- 不能同时通过类和数字 ID 选择 jquery 元素
- jQuery函数中的Regex将匹配ID+任何数字
- OData:对url请求中的数字(ID)字段进行通配符(startswith)筛选
- 正在计算数字ID
- 更改标签以匹配 ID 中的数字部分
- j查询以检查 ID 值是否有数字
- 阻止 Javascript 对大数字 ID 进行舍入
- 在 JavaScript 中按对象中的数字/ID 排序
- 将数字 ID 从 html 保管箱传递给 JS 函数
- 具有长数字 id 的 YUI 选择器
- 仅从 ID 字段中检索数字
- Fusion Tables&带侧边栏的地图:非洲地图样本中从数字到加密的ID
- 如何将生成的数字ID附加到某些链接
- 在jquery中选择ID+任意数字
- 如何使用JavaScript从id属性中去除非数字字符
- 使用数字id javascript处理html输入元素
- YUI通过id方法获取元素,该方法不适用于数字起始id