Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >编写javascript getById代码的角度方法

编写javascript getById代码的角度方法
EN

Stack Overflow用户
提问于 2022-02-08 07:59:27
回答 2查看 58关注 0票数 0

我正在做一个从AngularJS到Angular8的迁移项目

在那里我发现了这个代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// get the pattern from SVG document and set the stroke color
 var patternElt = $scope.svgDocument.find("#striped");
 patternElt.css("fill", color);
 // apply the striped class to the element
 element.css("fill", "url(#striped)");
 $(zoneClassSelector, element).css("fill", "url(#striped)");

上面的代码所做的是,当一个元素被单击时,它从一个svg文件中获取一个pattern元素,并向其添加一个fill颜色,然后将其应用于已单击的DOM元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<defs>
    <pattern id="striped" 
        width="8" height="8" 
        patternUnits="userSpaceOnUse"
        patternTransform="rotate(45)">
        <rect width="4" height="8" transform="translate(0,0)"></rect>
    </pattern>
</defs>

在我的例子中,在打字本代码中,我有以下内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
click($event: MouseEvent) {

let clickedEl = $event.target;
// check if clicked element is not an svg element 
if (clickedEl instanceof SVGPolygonElement || clickedEl instanceof SVGPathElement || clickedEl instanceof SVGGElement) {
  this.renderer.setAttribute(clickedEl, "style", "fill:url(#striped);");
}

}

备注:SVG文件加载了它的路径(在要引用的组件视图中没有SVG )

如何在将条带pattern元素传递给renderer setAttribute之前,使用Typscript向其添加填充颜色

EN

回答 2

Stack Overflow用户

发布于 2022-02-08 09:34:48

您可以尝试使用document.querySelector()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public fillColor(): void {
  const rectElement: SVGRectElement = document.querySelector('#striped') as SVGRectElement;
  rectElement.style.fill = 'red';
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<svg (click)="fillColor()">
  <defs>
    <pattern id="Pattern" width=".25" height=".25">
      <rect x="0" y="0" id="striped" width="50" height="50" />
    </pattern>
  </defs>
  <rect fill="url(#Pattern)" width="200" height="200" />
</svg>
票数 0
EN

Stack Overflow用户

发布于 2022-02-08 14:24:57

任何DOM元素引用都可以通过ViewChild属性获得

因此,在您的情况下,您将拥有以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<pattern #MyReference
    id="striped" 
    width="8" height="8" 
    patternUnits="userSpaceOnUse"
    patternTransform="rotate(45)">
    <rect width="4" height="8" transform="translate(0,0)"></rect>
</pattern>

然后在类中引用DOM对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ViewChild('MyReference', { static: false })
MyElem: ElementRef;

现在可以使用此引用和核心Renderer2库(导入到构造函数private renderer: Renderer2)进行任何DOM操作。

但是,如果您有一个加载了SVG元素的动态列表,并且正在寻找一种获取“在”单击的元素DOM中的方法--我将沿着创建“每个”这些元素的自定义组件的路线前进,并在这里具有clicked和元素引用。这样,每个组件都有一个单独的构建模式,并且您不必执行任何父级/同级DOM遍历。

(很基本,你会知道你需要什么输入)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ng-container *ngFor="let svg of list">
    <my-custom-component [inputs]="svg"></my-custom-component>
</ng-container>

然后,使用上述方法,单击上的每个组件只具有要操作的单个模式元素引用,而不需要直接遍历DOM。它还将使您的only方法非常精确,您不需要检查单击了什么,因为只有这个组件才会触发它(不需要全局鼠标事件)。

编辑1在查看评论时,我相信您所追求的是使用全局css变量。例如,可以在XML中执行以下操作:

然后将根类设置为显示其选定的(单击),例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<svg class="selected" >
    <use xlink:href="#" href="#" />
</svg>

然后你所做的就是通过CSS改变你的填充颜色,使之成为你想要它显示的东西。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.selected pattern
{
   --fill-color:"#123456"
}

如果这些问题都不合适,那么为了理解抱歉,可能需要更新一下这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71036951

复制
相关文章
编写可测试的JavaScript代码
既然要对代码进行测试,那么为什么不让这一过程变得尽可能简单和轻松呢?JavaScript客户端代码测试之所以尤其困难,是因为我们几乎无法控制代码运行的环境。多种类型的操作系统、多个版本的操作系统、多种类型的浏览器、多个版本的浏览器,更不用说插件、扩展、多语言版本和缩放大小了,还有一些未知内容,所有这些因素交织在一起,阻碍着应用程序的性能。这些因素会导致程序变慢、中断、崩溃,最终覆灭。
用户8983410
2021/10/07
4310
编写可测试的JavaScript代码
①使用敏捷开发,并不一定意味着应用程序完成得更快且质量更高,敏捷开发最大的优势是它处理需求变更的方式。
硬核项目经理
2019/08/06
1.4K0
怎样编写更好的 JavaScript 代码[每日前端夜话0xA4]
我看到没有多少人谈论改进 JavaScript 代码的实用方法。以下是我用来编写更好的 JS 的一些顶级方法。
疯狂的技术宅
2019/08/09
1.3K0
怎样编写更好的 JavaScript 代码[每日前端夜话0xA4]
如何编写漂亮的 JavaScript 代码
这是一条编程领域流传久远的规则。严格遵守这条规则会让你的代码可读性更好,也更容易重构。如果违反这个原则,那么代码会很难被测试或者重用。
小鑫
2022/02/23
7980
基础|如何优雅的编写JavaScript代码
前端爱好者的知识盛宴 今日 我们要聊一个简单但又不失深奥与思考的问题 进阶成为一名优秀的码农 应该具备哪些基本的素养? 没错 正如上图 作为一名优秀的码农 应具备 码得出代码, 看得懂自己码的代码, 让别人看得懂你码的代码, 这三个基本素养。 提高自身的编码能力和编写易于阅读和维护的代码,是广大码农们提高开发效率和职业身涯中必做的事情。 那么究竟如何编写出可维护的、优雅的代码呢? 避免使用 JS 糟粕和鸡肋 这些年来,随着 HTML5 和 Node.js 的发展,JavaScript 在各个领域遍地开花
用户1097444
2022/06/29
5900
基础|如何优雅的编写JavaScript代码
分享:使用 TypeScript 编写的 JavaScript 游戏代码
《上篇博客》我写出了我一直期望的 JavaScript 大型程序的开发模式,以及 TS(TypeScript) 的一些优势。博客完成之后,我又花了一天时间试用 TS,用它来重构之前编写的一个 JS 游
用户1172223
2018/01/26
2K0
抛弃变量,编写更加可读的JavaScript代码
理解一段代码最大的阻碍是大量的变量。而变量可以引入状态,这又将成倍的增加复杂性。每一个变量都使得理解代码更加困难。
疯狂的技术宅
2019/03/27
5020
编写高质量的 JavaScript 代码(一)
一、理解JavaScript的浮点数 由IEEE754标准制定,JavaScript中所有的数字都是双精度浮点数,即64位编码数字。 JavaScript大多数的算术运算符可以进行整数、浮点数或者两者
杨潼
2017/05/02
3.1K0
编写高质量的 JavaScript 代码(一)
深入JavaScript,编写高质量JavaScript代码的基本要点
软件bug的修改是昂贵的,并且随着时间的推移,bug修改的成本也会上升,所以要书写规范的代码,并且要在你记得住代码的含义时,立即完善代码的注释。
用户5997198
2019/11/09
5390
深入JavaScript,编写高质量JavaScript代码的基本要点
JavaScript编写高质量的68个有效方法
第一条:了解你使用的javascript 严格模式use strict 不允许重定义arguments变量 只有在脚本或函数的顶部才生效 不要将进行严格模式检查的代码和非严格模式的代码进行打包压缩 可通过立即调用函数隔离严格与非严格区域,单独隔离作用域 编写库时,开启严格检查,兼容性更强 (function () { "use strict"; function f() { // code } })(); 第二条:理解js浮点数 位运算会将数字转换为32位大端的2的补码表示的整数,8表示为0
Tiffany_c4df
2019/09/04
5370
编写精炼的JavaScript代码:避免多余的Else, 尽早Return
程序员一直被教导:“每个函数只能有一个退出点” 比如,“只从一个地方return”:
疯狂的技术宅
2019/03/27
1.3K0
编写自己的代码库(javascript常用实例的实现与封装)
因为公司最近项目比较忙,没那么多空余的事件写文章了,所以这篇文章晚了几天发布。但是这也没什么关系,不过该来的,总是会来的。 好了,其他的不多说的,大家在开发的时候应该知道,有很多常见的实例操作。比如数组去重,关键词高亮,打乱数组等。这些操作,代码一般不会很多,实现的逻辑也不会很难,下面的代码,我解释就不解释太多了,打上注释,相信大家就会懂了。但是,用的地方会比较,如果项目有哪个地方需要用,如果重复写的话,就是代码沉余,开发效率也不用,复用基本就是复制粘贴!这样是一个很不好的习惯,大家可以考虑一下把一些常见的操作封装成函数,调用的时候,直接调用就好! 源码都放在github上了,大家想以后以后有什么修改或者增加的,欢迎大家来star一下ec-do。
守候i
2018/08/22
1.4K0
编写自己的代码库(javascript常用实例的实现与封装)
Go语言项目结构指南:从代码包的角度看如何编写高质量的Go代码
Go语言是一种简洁、高效、可靠的编程语言,它支持并发、垃圾回收、模块化等特性,适用于各种场景和领域。Go语言的源码是以代码包为基本组织单位的,一个代码包可以包含多个源码文件,每个源码文件都必须在文件头部声明自己所属的包名。代码包可以被其他代码包导入和使用,实现代码的复用和模块化。
运维开发王义杰
2023/08/10
2380
Go语言项目结构指南:从代码包的角度看如何编写高质量的Go代码
编写可维护的JavaScript
• 在方法中的局部变量(local variable)和第一条语句之间
硬核项目经理
2019/08/07
8640
编写自己的代码库(javascript常用实例的实现与封装--续)
这个系列的上一篇文章(编写自己的代码库(javascript常用实例的实现与封装))总结了34个常见的操作。但是在开发中,常见的实例又何止这么多个,经过这些日子的探索,以及他人的意见,现在得追加一些操作实例了。希望能帮到大家,也希望如果大家觉得有什么需要追加的,觉得我哪里写得不好或者写错了,欢迎评论或者私信我!另外,项目仍然是之前的那个,代码已经上传上去了,也欢迎大家在github上面star一下ec-do! 好,下面正式进入正文!
守候i
2018/08/22
8120
「  1.JavaScript的编写位置:  」
one day {dotted startColor="#ff6c6c" endColor="#1989fa"/}
青益
2023/01/03
2630
编写更好的代码
毫无疑问编写代码本身是一件很难的事,但是在遵循一些指导原则的话,我们可以相对编写出更好的代码。
杜逸先
2023/04/13
4280
C#执行Javascript代码的几种方法
一、开源项目 Javascript .NET 地址: http://javascriptdotnet.codeplex.com/ 它是Google Chrome V8引擎在.NET上的封装,功能完善,性能相对较高,推荐使用! (缺点就是asp.net web应用上,好象会报错) 示例代码: using Noesis.Javascript; using System; using System.Collections.Generic; namespace JsCSharp { class Progr
菩提树下的杨过
2018/01/24
5.5K0
使用AmplifyJS和JQuery编写更好更优雅的javascript事件处理代码
事件(或消息)是一种经常使用的软件设计模式。可以减少消息处理者和消息公布者的之间的耦合,比方J2EE里面的JMS规范。设计模式中的观察者模式(也叫公布/订阅模式)。这对于javascript代码相同适用。之前写的JQuery相关博客中。具体介绍了JQuery的事件处理机制和特性,具体可以參考这个文件夹下的文章。
全栈程序员站长
2022/07/10
6680
点击加载更多

相似问题

角度测试,有更好的方法来编写这段代码吗?

13

使用变量调用extjs getById方法

12

如何用JavaScript数组映射方法编写循环代码

10

编写“编写代码”的最佳方法::Qt

23

动态编写Javascript代码?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文