草庐IT

html - 从 DOM 的特定元素选择性地复制 HTML+CSS+JS 的工具

coder 2023-04-23 原文

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

5年前关闭。



Improve this question




像大多数 Web 开发人员一样,我偶尔喜欢查看网站的源代码,看看他们的标记是如何构建的。 Firebug 和 Chrome Developer Tools 等工具可以轻松检查代码,但如果我想复制特定部分并在本地使用它,复制所有单个元素及其关联的 CSS 会很痛苦。并且可能同样多的工作可以保存整个源代码并删除不相关的代码。
如果我可以在 Firebug 中右键单击一个元素并有一个“为这个元素保存 HTML+CSS+JS”选项,那就太好了。有这样的工具吗?是否可以扩展 Firebug 或 Chrome 开发人员工具来添加此功能?

最佳答案

SnappySnippet

我终于找到了一些时间来创建这个工具。您可以安装 SnappySnippet来自 Github。它允许从指定的(最后检查的)DOM 节点中轻松提取 HTML+CSS。此外,您可以将代码直接发送到 CodePen 或 JSFiddle。享受!



其它功能

  • 清理 HTML(删除不必要的属性,修复缩进)
  • 优化 CSS 使其可读
  • 完全可配置(可以关闭所有过滤器)
  • ::before 合作和 ::after伪元素
  • 漂亮的用户界面感谢 Bootstrap & Flat-UI元素

  • 代码

    SnappySnippet 是开源的,你可以找到 code on GitHub .

    执行

    因为我在做这个的过程中学到了很多东西,所以我决定分享一些我遇到的问题和我的解决方案,也许有人会觉得很有趣。

    第一次尝试 - getMatchedCSSRules()

    起初,我尝试检索原始 CSS 规则(来自网站上的 CSS 文件)。令人惊讶的是,这非常简单,感谢 window.getMatchedCSSRules()但是,效果并不好。问题是我们只采用了在整个文档的上下文中匹配的 HTML 和 CSS 选择器的一部分,而在 HTML 片段的上下文中不再匹配。由于解析和修改选择器似乎不是一个好主意,我放弃了这个尝试。

    第二次尝试 - getComputedStyle()

    然后,我从@CollectiveCognition 建议的内容开始 - getComputedStyle() .但是,我真的很想将 CSS 表单 HTML 分开,而不是内联所有样式。

    问题 1 - 从 HTML 中分离 CSS

    这里的解决方案不是很漂亮,但很简单。我已将 ID 分配给所选子树中的所有节点,并使用该 ID 创建适当的 CSS 规则。

    问题 2 - 删除具有默认值的属性

    为节点分配 ID 效果很好,但是我发现我的每个 CSS 规则都有大约 300 个属性,使整个 CSS 不可读。
    原来是 getComputedStyle()返回为给定元素计算的所有可能的 CSS 属性和值。其中一些为空,一些具有浏览器默认值。要删除默认值,我必须首先从浏览器中获取它们(每个标签都有不同的默认值)。解决方案是将来自网站的元素的样式与插入空 <iframe> 的相同元素进行比较。 .这里的逻辑是空 <iframe> 中没有样式表。 ,所以我在那里附加的每个元素都只有默认的浏览器样式。通过这种方式,我能够摆脱大部分无关紧要的属性。

    问题 3 - 只保留速记属性

    我发现的下一件事是不必要地打印出具有速记等效项的属性(例如,有 border: solid black 1px 然后是 border-color: black;border-width: 1px itd.)。
    为了解决这个问题,我简单地创建了一个具有速记等效项的属性列表,并将它们从结果中过滤掉。

    问题 4 - 删除前缀属性

    上次操作后,每个规则中的属性数量明显减少,但我发现我仍然有很多-webkit-我从未听说过的前缀属性 ( -webkit-app-region ? -webkit-text-emphasis-position ?)。
    我想知道我是否应该保留这些属性中的任何一个,因为其中一些看起来很有用( -webkit-transform-origin-webkit-perspective-origin 等)。不过,我还没有想出如何验证这一点,因为我知道大多数时候这些属性只是垃圾,所以我决定将它们全部删除。

    问题 5 - 组合相同的 CSS 规则

    我发现的下一个问题是相同的 CSS 规则一遍又一遍地重复(例如,对于每个具有完全相同样式的 <li>,在创建的 CSS 输出中都有相同的规则)。
    这只是相互比较规则并将具有完全相同属性和值集的规则组合起来的问题。结果,不是#LI_1{...}, #LI_2{...}我收到了 #LI_1, #LI_2 {...} .

    问题 6 - 清理和修复 HTML 的缩进

    因为我对结果很满意,所以我转向了 HTML。它看起来一团糟,主要是因为 outerHTML属性保持它的格式与从服务器返回的完全一样。
    唯一取自 outerHTML 的 HTML 代码需要的是一个简单的代码重新格式化。由于它在每个 IDE 中都可用,我确信有一个 JavaScript 库可以做到这一点。事实证明,I was right (jquery-clean) .更重要的是,我已经删除了不必要的属性( styledata-ng-repeat 等)。

    问题 7 - 过滤器破坏 CSS

    由于在某些情况下上述过滤器可能会破坏代码段中的 CSS,因此我将它们全部设为可选。您可以从“设置”菜单中禁用它们。

    关于html - 从 DOM 的特定元素选择性地复制 HTML+CSS+JS 的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911338/

    有关html - 从 DOM 的特定元素选择性地复制 HTML+CSS+JS 的工具的更多相关文章

    1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

      我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

    2. ruby - capybara field.has_css?匹配器 - 2

      我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No

    3. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

      我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

    4. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

      在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

    5. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

      所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

    6. ruby-on-rails - Ruby url 到 html 链接转换 - 2

      我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

    7. ruby - 在哈希的键数组中追加元素 - 2

      查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用

    8. ruby-on-rails - capybara ::ElementNotFound:无法找到 xpath "/html" - 2

      我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'

    9. css - 用 watir 检查标签类? - 2

      我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes

    10. ruby - 使用 `+=` 和 `send` 方法 - 2

      如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

    随机推荐