小编Dom*_*ino的帖子

如何用JavaScript包装节点中的部分文本

我有一个具有挑战性的问题要解决.我正在编写一个以正则表达式作为输入的脚本.然后,此脚本在文档中查找此正则表达式的所有匹配项,并将每个匹配项包装在其自己的<span>元素中.困难的部分是文本是格式化的html文档,因此我的脚本需要在DOM中导航并同时在多个文本节点上应用正则表达式,同时确定在必要时拆分文本节点的位置.

例如,使用正则表达式捕获以大写字母开头并以句点结尾的完整句子,本文档:

<p>
  <b>HTML</b> is a language used to make <b>websites.</b>
  It was developed by <i>CERN</i> employees in the early 90s.
<p>
Run Code Online (Sandbox Code Playgroud)

会变成这样:

<p>
  <span><b>HTML</b> is a language used to make <b>websites.</b></span>
  <span>It was developed by <i>CERN</i> employees in the early 90s.</span>
<p>
Run Code Online (Sandbox Code Playgroud)

然后该脚本返回所有已创建的跨度的列表.

我已经有一些代码可以找到所有文本节点,并将它们存储在列表中,以及它们在整个文档中的位置及其深度.你真的不需要理解代码来帮助我及其递归结构可能有点令人困惑.Ť 他我不知道该怎么办第一部分是搞清楚哪些元素应包括在范围之内.

function SmartNode(node, depth, start) {
  this.node = node;
  this.depth = depth;
  this.start = start;
}


function findTextNodes(node, depth, start) {
  var list = [];
  var start = start || 0;
  depth = (typeof depth …
Run Code Online (Sandbox Code Playgroud)

html javascript regex algorithm

46
推荐指数
4
解决办法
3953
查看次数

javascript检查值是否与对象匹配

我有一个javascript对象

var obj = {
    "0" : "apple",
    "1" : "pear",
    "2" : "orange"
}
Run Code Online (Sandbox Code Playgroud)

我想检查'orange'是否在obj中.

是否有内置功能可以做到这一点?或者我应该迭代obj的每个值?

谢谢.

javascript object

10
推荐指数
1
解决办法
2万
查看次数

如何使用工厂常量构造函数?

为了测试我对 Dart 的理解,我制作了一个 2D 不可变向量,它不仅存储了它的 x 和 y 分量,还存储了它的角度和长度。它们仅在构建时根据 x 和 y 值计算。我很快意识到需要使用初始化列表或this-parameter 快捷方式设置最终字段,这不允许太多计算值。就像这个答案指出的那样,我不得不使用工厂构造函数从其 x 和 y 分量中创建我的向量。工厂构造函数然后在调用私有构造函数之前验证输入并计算长度和角度。

import 'dart:math';

class ImmutableVector {

  // private fields
  final double _x;
  final double _y;
  final double _angle;
  final double _length;

  // getters
  double get x => _x;
  double get y => _y;
  double get angle => _angle;
  double get length => _length;

  /// Constructs a vector out of cartesian components.
  /// 
  /// Converts both arguments to doubles.
  /// …
Run Code Online (Sandbox Code Playgroud)

constructor factory constants dart

5
推荐指数
1
解决办法
3623
查看次数

如何解析和捕获任何测量单位

在我的应用程序中,用户可以自定义测量单位,因此如果他们想要以分米而不是英寸或全转而不是度数工作,他们可以.但是,我需要一种方法来解析包含多个值和单位的字符串,例如1' 2" 3/8.我在SO上看到了一些正则表达式,并没有找到任何匹配帝国系统的所有情况,更不用说允许任何类型的单位了.我的目标是拥有最宽松的输入框.

所以我的问题是:如何以最用户友好的方式从字符串中提取多个价值单元对?


我想出了以下算法:

  1. 检查非法字符并在需要时抛出错误.
  2. 修剪前导和尾随空格.
  3. 每次有一个非数字字符后跟一个数字字符,将字符串分成几部分,除了.,/,用于识别小数和分数.
  4. 从零件中删除所有空格,检查字符误用(多个小数点或分数条)并替换''".
  5. 每个部件的拆分值和单位字符串.如果零件没有单位:
    • 如果是第一部分,请使用默认单位.
    • 否则,如果它是一个分数,则将其视为与前一部分相同的单位.
    • 否则,如果不是,则根据前一部分的单位将其视为cm,mm或mm.
    • 如果它不是第一部分并且无法猜测单位,则抛出错误.
  6. 检查单位是否意味着什么,是否都是相同的系统(公制/英制)并遵循降序(ft> in> fraction或m> cm> mm> fraction),否则抛出错误.
  7. 转换并求和所有部分,在此过程中进行划分.

我想我可以使用字符串操作函数来完成大部分工作,但我觉得必须有一个更简单的方法来通过正则表达式.


我提出了一个正则表达式:
((\d+('|''|"|m|cm|mm|\s|$) *)+(\d+(\/\d+)?('|''|"|m|cm|mm|\s|$) *)?)|((\d+('|''|"|m|cm|mm|\s) *)*(\d+(\/\d+)?('|''|"|m|cm|mm|\s|$) *))

它只允许最后的分数,并允许在值之间放置空格.我从来没有使用正则表达式捕获,所以我不太确定我将如何设法从这个混乱中提取值.我明天再来一次.

javascript regex language-agnostic

2
推荐指数
1
解决办法
1196
查看次数

在路径表面外部绘制轮廓

我有以下代码来绘制形状(主要用于矩形),但 HTML5 绘图函数似乎绘制边框,其厚度以指定的线条为中心。我想在形状表面之外有一个边框,但我不知所措。

Path.prototype.trace = function(elem, closePath) {
  sd.context.beginPath();
  sd.context.moveTo(this.getStretchedX(0, elem.width), this.getStretchedY(0, elem.height));
  sd.context.lineCap = "square";

  for(var i=1; i<this.points.length; ++i) {
    sd.context.lineTo(this.getStretchedX(i, elem.width), this.getStretchedY(i, elem.height));
  }

  if(closePath) {
    sd.context.lineTo(this.getStretchedX(0, elem.width), this.getStretchedY(0, elem.height));
  }
}
Run Code Online (Sandbox Code Playgroud)

一旦形状应用于设置的元素宽度、高度和偏移位置,getStretchedX 和 getStretchedY 返回第 n 个顶点的坐标。


感谢 Ken Fyrstenberg 的回答,我已经让它适用于矩形,但遗憾的是这个解决方案不适用于其他形状。

http://jsfiddle.net/0zq9mrch/

失败的三角形

在这里,我画了两个“宽”边框,一个在每个位置减去一半的线宽,另一个添加。它不起作用(如预期),因为它只会在一种情况下将粗线放在上方和左侧,在另一种情况下将粗线放在下方和右侧 - 而不是形状“外部”。您还可以看到斜坡周围有一个白色区域。


我尝试弄清楚如何让顶点手动绘制粗边框的路径(使用fill()而不是stroke())。

显示顶点的粗三角形

但事实证明我仍然遇到同样的问题:如何以编程方式确定边缘是内部还是外部。这需要一些三角学和繁重的算法。对于我现在的工作目的来说,这太麻烦了。我想用它来绘制建筑物的地图。房间墙壁需要绘制在给定尺寸之外,但我现在将坚持使用独立的倾斜墙壁。

html javascript canvas

1
推荐指数
1
解决办法
2625
查看次数

为什么我不能将一个long-object变量转换为double?

我是C#的新手(但我知道C++,JavaScript和Java),我正在使用JSON.net将JSON文件解析为Dictionary<string, object>.现在我正在尝试将一个被解析为a的值存储long到一个double变量中.(我查看了检查器,它说字典值是类型object{long}.)

object obj = 123L;
double dbl = (double)obj;
Run Code Online (Sandbox Code Playgroud)

这给了我一个InvalidCastException.我进行了一些实验,发现Convert.ToDouble(obj)效果很好.我环顾四周,找不到关于铸造和转换之间差异的任何信息.也:

var v = 123L;
double dbl = (double)v;
Run Code Online (Sandbox Code Playgroud)

这非常有效.我猜那是因为在这种情况下,var在编译时变成了Int64.

c# casting type-conversion

1
推荐指数
1
解决办法
55
查看次数

什么时候应该在 dart 中使用 final 字段、工厂构造函数或带有 getter 的私有字段?

如果你能弄清楚如何重命名这个问题,我愿意接受建议。

在 Dart 语言中,可以编写一个带有 final 字段的类。这些是只能在构造函数体运行之前设置的字段。这可以在声明时(通常用于类内的静态常量),在声明构造函数或使用this.field速记时的初始化列表语法中:

class NumBox{
  final num value;
  NumBox(this.value);
}
Run Code Online (Sandbox Code Playgroud)

假设我实际上需要对实例创建进行一些处理,并且不能只是在构造函数之前初始化该字段。我可以切换到使用带有 getter 的私有非最终字段:

class NumBox{
  num _value;
  NumBox(num v) {
    _value = someComplexOperation(v);
  }
  num get value => _value;
}
Run Code Online (Sandbox Code Playgroud)

或者我可以使用工厂构造函数获得类似的行为:

class NumBox{
  final num value;
  factory NumBox(num v) {
    return new NumBox._internal(someComplexOperation(v));
  };
  NumBox._internal(this.value);
}
Run Code Online (Sandbox Code Playgroud)

几年前我尝试学习 Dart 时遇到了类似的问题,现在我有更多的包袱,我仍然不知道。什么是更聪明的方法来做到这一点?

getter factory final dart

1
推荐指数
1
解决办法
821
查看次数