我正在尝试扩展DOMDocument类,以便更轻松地选择XPath.我写了这段代码:
class myDOMDocument extends DOMDocument {
function selectNodes($xpath){
$oxpath = new DOMXPath($this);
return $oxpath->query($xpath);
}
function selectSingleNode($xpath){
return $this->selectNodes($xpath)->item(0);
}
}
Run Code Online (Sandbox Code Playgroud)
这些方法分别返回DOMNodeList和DOMNode对象.我现在要做的是为DOMNode对象实现类似的方法.但显然如果我编写一个扩展DOMNode的类(myDOMNode),我将无法在myDOMDocument返回的节点上使用这两个额外的方法,因为它们是DOMNode(而不是myDOMNode)对象.
我是对象编程的初学者,我尝试了各种各样的想法,但它们都导致了死胡同.
任何提示?非常感谢提前.
我需要修剪多行字符串中的前导和尾随空格.我用String替换方法尝试了这个正则表达式:
String.replace(/^\s+|\s+$/gm, "");
Run Code Online (Sandbox Code Playgroud)
但是,在仅包含空格的行上,换行符中的换行符将丢失.例如(^表示空格):
^^^^1234^^^^
^^^^5678^^^^
^^^^^^^
^^90^^
Run Code Online (Sandbox Code Playgroud)
输出:
1234
5678
90
Run Code Online (Sandbox Code Playgroud)
我应该使用什么正则表达式来保留第三行(空):
1234
5678
90
Run Code Online (Sandbox Code Playgroud) 使用raphael.js库,可以使用 SVG 路径语法来描述路径(例如M98.36,214.208l2.186-1.093V210.2l-3.378,0.117l1.174,4.137L98.36,214.208z,它提供了一种非常紧凑的方式来创建形状(特别是如果您的形状是使用 Illustrator 等外部应用程序绘制的)。
我对使用paper.js感兴趣库(不是基于 SVG)感兴趣,但乍一看文档似乎表明路径是通过对象方法逐步构建的。这是一种非常不同的方法(可以说“路径构建”与“路径描述”),不太适合我的需求。
那么:有没有办法在 paper.js 中使用 SVG 路径?或者类似的“路径描述”解决方案?
参考:
我有一个JavaScript函数,可以直接调用,作为jQuery事件的回调.
在后一种情况下,jQuery Event对象将作为参数传递.当我直接调用函数时,我还提供了一个参数(不同类型,但仍然是一个Object).
因此,我需要能够检查(在函数体内)如何调用函数,以便知道它正在处理什么类型的参数.
有一个简单的方法吗?
作为bacon.js的新手,我似乎无法理解事件流和属性之间的区别.
.constant?构建的属性)有人可以解释这些差异以及何时使用哪些?
在下面的示例中,stream并property具有完全相同的行为.我恐怕没有超越这个.
var stream = Bacon.sequentially(250, [1, 2, 3, 4, 5, 6, 7, 8]);
var property = stream.toProperty();
stream.onValue(function (val) {
console.log("Stream", val);
});
property.onValue(function (val) {
console.log("Property", val);
});
Run Code Online (Sandbox Code Playgroud) 我是paper.js的新手.
对于这个项目,我需要一个将在许多实例中使用的形状(具有不同的填充颜色),因此使用符号(而不是使用Path.clone()方法)显然更好.但是,一旦我将符号实例化为placementSymbol,似乎更改fillColor属性对渲染的形状没有影响:它仍然是符号的初始颜色.
已成功设置其他属性,例如位置或不透明度.
我的问题:如何更改符号的每个实例的填充颜色?
jsFiddle这里:http://jsfiddle.net/GlauberRocha/uTskY/(请注意,我已将所有代码放在HTML窗格中.似乎没有其他工作,可能是因为paperscript不是简单的javascript).
论文代码:
var
path = new Path(),
symbol = {},
inst = [],
colors = ["#1f8f81", "#c7c5a8", "#1b4a9f", "#d6a493", "#1a8879", "#599ce3", "#1a459c", "#b9a87a", "#365db2", "#2479d4", "#a46430", "#1b449a", "#a4632e", "#1a4297", "#3359ad", "#b1852b", "#1a8077", "#1b3849", "#ae832a", "#186cc9", "#1b8178"]
path.add(new Point(0, 56), new Point(56, 0), new Point(56, 40), new Point(0, 96));
path.fillColor = "red";
path.closed = true;
symbol = new Symbol(path);
path.remove();
for (var i = 0; i < 20; ++i) {
inst[i] = symbol.place(); …Run Code Online (Sandbox Code Playgroud) 在XSLT程序中的某个时刻,我有以下内容:
<xsl:for-each select="tags/tag">
<xsl:apply-templates select="//shows/show[film=//films/film[tag=current()/@id]/@id]|//shows/show[group=//groups/group[film=//films/film[tag=current()/@id]/@id]/@id]">
<xsl:sort select="date" data-type="text" order="ascending"/>
<xsl:sort select="time" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
似乎XPath表达式//shows/show[film=//films/film[tag=current()/@id]/@id]|//shows/show[group=//groups/group[film=//films/film[tag=current()/@id]/@id]/@id]相当复杂,大大减慢了程序的执行速度(与添加引用代码之前的执行时间相比 - 当然是处理相同的数据).
你认为这是正常的,因为表达的性质相对复杂,你是否看到我如何改进它以使其表现更好?
注意:在XPath表达式中,film和//films/film,group并//groups/group引用不同的元素.
请参阅下面的XML输入的精简样本.
<program>
<tags>
<tag id="1">Tag1</tag>
<tag id="2">Tag2</tag>
<tag id="3">Tag3</tag>
</tags>
<films>
<film id="1">
Film1
<tag>2</tag><!-- References: /program/tags/tag/@id=2 -->
</film>
<film id="2">
Film2
<tag>1</tag><!-- References: /program/tags/tag/@id=1 -->
</film>
<film id="3">
Film3
<tag>3</tag><!-- References: /program/tags/tag/@id=3 -->
</film>
<film id="4">
Film4
<tag>3</tag><!-- References: /program/tags/tag/@id=3 -->
</film>
</film>
<groups>
<group id="1">
<film>3</film><!-- References: /program/films/film/@id=3 …Run Code Online (Sandbox Code Playgroud) 在PHP中,我需要编写一个函数,它接受一个字符串并尽可能将其转换返回到float,否则只返回输入字符串.
我认为这个功能会起作用.显然这种比较是错误的,但我不明白为什么.
function toNumber ($input) {
$num = floatval($input); // Returns O for a string
if ($num == $input) { // Not the right comparison?
return $num;
} else {
return $input;
}
}
echo(gettype(toNumber("1"))); // double
echo(gettype(toNumber("3.14159"))); // double
echo(gettype(toNumber("Coco"))); // double (expected: string)
Run Code Online (Sandbox Code Playgroud) javascript ×5
paperjs ×2
php ×2
bacon.js ×1
canvas ×1
dom ×1
domdocument ×1
events ×1
html5-canvas ×1
jquery ×1
oop ×1
performance ×1
raphael ×1
regex ×1
svg ×1
xpath ×1
xslt ×1