javascript - 如何将文档 CSS 属性应用于已解析的元素而不将其附加到 DOM

标签 javascript dom domparser getcomputedstyle

常用的方法是将新元素附加到正文,然后获取计算的 css 值,就像在这个 jQuery 脚本中一样:

    var $body = $('body');
    var $this =  $(this);
    var $text = $this.text();
    if($text=='') $text = $this.val();
    var calc = '<div style="clear:both;display:block;visibility:hidden;"><span style="width:inherit;margin:0;font-family:'  + $this.css('font-family') + ';font-size:'  + $this.css('font-size') + ';font-weight:' + $this.css('font-weight') + '">' + $text + '</span></div>';
    $body.append(calc);
    var width = $body.find('span:last').width();
    $body.find('span:last').parent().remove();
    return width;     

问题是如何在不将其附加到 DOM 的情况下执行此操作以避免重新渲染缓慢,此脚本在不将其附加到 DOM 的情况下执行此操作:

    var fakeInputText = '<div style="clear:both;display:block;"><span style="width:inherit;margin:0;font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:22px;font-weight:400"></span></div>';
    var parser = new DOMParser();
    var doc = parser.parseFromString(fakeInputText, "text/html");


    var style = document.defaultView.getComputedStyle(doc.getElementsByTagName("div")[0]); //doc.querySelector("span")
    console.log(style);

这就是它得到的: Chrome console result

最佳答案

您可以创建一个 jQuery 元素,而无需将其附加到 DOM。

var $yourCachedElement = $("<div>", { // Create your element
   style: "your styling",
   html: "html code to store inside this element"
}),
widthYouWannGet = $yourCachedElement.width(); // Store element's width into the var

关于javascript - 如何将文档 CSS 属性应用于已解析的元素而不将其附加到 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487226/

相关文章:

javascript - 如何根据某人是否使用 AngularJS 登录来隐藏和显示导航栏元素?

javascript - jQuery 隐藏跨度值超过范围 slider 值的部分

javascript - 如何根据 Microsoft CRM 代码审查在 HTML Webresouce 中使用 javascript document.createElement、document.body、$(document)?

javascript - 使用 Javascript DOM 根据条件选择元素

有命名空间时的 Android XML DOM 解析?

javascript - val() 返回 [object 对象]

javascript - 表格行中的不同列数

javascript - DOM 元素/节点的唯一标识符是什么

java - DOM 解析器读取 Xml、检索属性值并存储它们

java - 如何获取 w :t content provided a w:p child in xml using xpath