当前位置: 首页 > 知识库问答 >
问题:

有没有一种方法可以使用原始字符串在一次传递中为一个标记设置几个属性?

松建本
2023-03-14

是的,我可以解析字符串并使用$(..).attr()来设置每个值,但由于性能原因,我正在寻找一种方法来避免不必要的双重转换(可能会从服务器接收大量数据,每个标记有许多属性,因此通过一次传递为一个标记设置所有属性可以在前端得到轻松的改进)。不管怎么说,如果我已经有了一部分可以使用的经过处理的HTML代码--为什么不直接使用它呢。

UPD:这不是关于如何在一次调用中设置多个属性的重复问题,因为我正在寻找一种方法来避免解析属性值,所以下面的解决方案不能回答我的问题:

d.setAttributes({
'id':'my_div',
'class':'my_class',
'styles':{
    'backgroundColor':'blue',
    'color':'red'
},
'html':'lol'
});

因为我仍然必须以这样的方式解析源字符串

UPD2只是为了解释一下:控制器发送的这个字符串生成它用于Smarty模板,如下所示:,但是在本例中,我接收的字符串不是作为Smarty变量,而是作为ajax应答的一部分。

共有1个答案

阳兴朝
2023-03-14

这确实回答了这个问题,但不一定是一个好主意。

它在outerhtml上使用替换回调,而回调几乎总是比替代方法更昂贵。

我无法想象按顺序设置属性对性能的影响会有多大,除非您有大量的元素,但这里仍然是:

var
el = document.querySelector('p'),
attrs = 'style="color: blue" title="hello" data-etc="foo"';
el.outerHTML = el.outerHTML.replace(/<[^ >]+/i, function(tag) { return tag+' '+attrs; });
 类似资料:
  • 在C中,如果值不能为NULL,则通常引用传递而不是指针。 假设我有一个具有以下签名的函数,该签名通常与字符串文字一起使用。 我想知道如何更改函数,使其接受引用(并且具有不接受NULL的优势)? > 另一个选项是

  • 问题内容: 我正在尝试Sphere Online Judge(SPOJ)的“下一个回文”问题,在该问题中,我需要找到最多100万个整数的回文。我曾考虑过使用Java的函数来反转字符串,但是它们是否允许字符串这么长? 问题答案: 你应该能够得到一个长度为String的字符串 总是2147483647(2 31 - 1) (由Java规范定义,阵列的最大尺寸,这对于内部存储String类用途) OR

  • 我有以下2种方法: 两种方法的内容相等,我尝试使用以下方法: 但当我尝试将其与字符串或Long iterable一起使用时,它会引发编译错误。有什么解决方案吗?

  • 我想将具有相同命名实体注释的连续令牌(例如,斯坦福大学,其中两个令牌“斯坦福”和“大学”都有NE“组织”)组合成一个单一的令牌,这样我就有了NE“组织”的“斯坦福大学”。有没有一种方法可以用令牌regex做到这一点? 谢了!

  • 问题内容: 让我们说我有这样的查询: 通过在各处手动更改字符串,我使用不同的表多次运行此查询。我尝试声明以下内容: 但这似乎不起作用,因为它引发了一个错误,提示我必须先声明为表变量,然后才能使用它。我如何对表名进行模板化,如果可以的话,Intellisense仍然可以使用吗? 问题答案: 您可以将其包装在EXEC语句中,如下所示: 但是不,在这种情况下,智能感知将无法正常工作。 如果您事先知道输出

  • 问题内容: 假设我有以下代码: 这段代码的问题在于,协程内部的循环永远不会完成第一次迭代,而大小会不断增加。 为什么会这样发生,我该怎么解决? 我无法摆脱单独的线程,因为在我的真实代码中,我使用了单独的线程与串行设备进行通信,而且我还没有找到使用的方法。 问题答案: 不是线程安全的,因此您不能直接在多个线程中直接使用它。相反,您可以使用,它是提供线程感知队列的第三方库: 还有(全披露:我写了它),