javascript .replace width tag
javascript .replace width tag
正在寻找javascript reg ex替换的帮助。我需要的是替换的所有实例
width="100">
带
style="width: 100px;"
但实际的px值是可变的,这就是给我带来问题的原因。我知道reg表达式是可行的,但我不太理解。
这是一个类似的问题,但对我来说并不能解决问题:JavaScript Regex替换宽度属性匹配
这是一个问题的原因是因为TinyMce生成的HTML。。。
两个选项:
-
使用正则表达式
-
解析HTML并使用DOM(首选)
使用正则表达式
表达式相当简单:
str = str.replace(/'bwidth="('d+)"/g, 'style="width: $1px"');
替换字符串中的$1
填充有第一捕获组的内容。
示例:
var str = '<div width="100">Stuff here</div><div width="240">More stuff here</div>';
display("Before: '" + str + "'");
str = str.replace(/'bwidth="('d+)"/g, 'style="width: $1px"');
display("After: '" + str + "'");
function display(msg) {
document.body.insertAdjacentHTML(
"beforeend",
"<p>" +
String(msg)
.replace(/&/g, "&")
.replace(/</g, "<") +
"</p>"
);
}
但请注意,这将:
替换字符串中所有处的
width="nnn"
,即使不在起始标记内最终为已经有一个的标签添加第二个
style
属性
如果可以的话,那太好了;如果没有,您可能需要解析HTML,处理解析后的DOM节点,然后再次序列化它。
解析HTML并使用DOM
更好的选择是解析HTML并使用DOM。您已经说过HTML将用于div
,所以我们不必担心独立的表单元格等问题。
下面是一个简单的解析和更新示例:
var str = '<div width="100">Stuff here</div><div width="240">More stuff here</div>';
var div = document.createElement('div');
div.innerHTML = str;
update(div.childNodes);
display("Before: '" + str + "'");
str = div.innerHTML;
display("After: '" + str + "'");
function update(nodes) {
Array.prototype.forEach.call(nodes, function(node) {
var width;
if (node.nodeType === 1) { // An element
width = node.getAttribute("width");
if (width) {
node.removeAttribute("width");
node.style.width = width + "px";
}
update(node.childNodes);
}
});
}
function display(msg) {
document.body.insertAdjacentHTML(
"beforeend",
"<p>" +
String(msg)
.replace(/&/g, "&")
.replace(/</g, "<") +
"</p>"
);
}
我的第一个想法也是使用DOM,而不是使用RegEx。我们可以使用支持属性选择器的querySelector
,而不是对所有元素进行迭代。
var html = '<img src="//placehold.it/100x100" alt="" style="100px;">'+
'<img src="//placehold.it/120x120" alt="" width="120" style="border: 2px solid steelblue;">'+
'<img src="//placehold.it/140x140" alt="" width="140">',
wrap = document.createElement('div'),
nodes;
wrap.innerHTML = html;
nodes = wrap.querySelectorAll('[width]');
Array.prototype.forEach.call(nodes, function(el) {
var width = el.getAttribute('width');
if(width) {
el.removeAttribute('width');
el.style.width = width+'px';
}
});
相关文章:
- 可以't使用JavaScript获取width属性
- Setting default onclick behavior for <img> tag in gene
- margin-left和width属性在mozillafirefox中不起作用
- Webscratching自动化如何在没有链接TAG的情况下模拟点击HREF链接
- 覆盖“;X-Robots-Tag:noindex“;在汤博乐
- Javascript检测TAG中的完整URL
- 获取Div Width,然后更新Scope Variable
- 无法理解$(window).width()的结果
- $.width()在使用自定义字体时返回不同的结果
- 先前创建的Element的jQuery.width()返回0
- TinyMCE/IE9/DIV with Width/Height/ContentEditable/如何阻止DIV选择
- 将 jQuery 代码翻译成普通的 JavaScript for Google Tag Manager
- jQuery Tag-It – 如何在选择标签时自动显示自动完成列表
- HTML
“width” 属性在不同的浏览器中产生不同的结果 - 为什么 jQuery $('#selector').width(1) 应用 17px 而不是 1px
- 如何将 screen.width 值替换为我自己定义的值
- jquery .width(value) 是否调整容器内图像的大小
- jQuery width();无法正常工作
- GWT应用程序中出现错误HTTP 404(“Script Tag Failure-no status available
- javascript .replace width tag