我正在尝试学习一些jQuery,并使用以下代码设置测试页面:
<a id='encode' href='javascript: void(0)'>encode</a> |
<a id='decode' href='javascript: void(0)'>decode</a> |
<br/>
<textarea id='randomString' cols='100' rows='5'></textarea>
<script type='text/javascript'>
$(document.ready(function () {
$('#encode').click(function() {
$('#randomString').val(escape($('#randomString').val()));
});
$('#decode').click(function() {
$('#randomString').val(unescape($('#randomString').val()));
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
我的想法是我可以在textarea中放置一些东西,然后点击"编码"或"解码",它将要么逃避或者忽略我放入textarea的东西.
这段代码工作正常,但我的问题与我如何更改textarea的值有关.在我的代码中,我选择了两次textarea值:一次(un)转义它,再一次改变值.IMO这看起来很笨拙,也许没必要.我想也许我可以这样做:
$('#randomString').val(escape(this));
Run Code Online (Sandbox Code Playgroud)
但this
似乎是指我点击的链接的对象,而不是#randomString
选择器,所以是否有一些其他可以用来引用它的魔术词$('#randomString')
?
这是我的情况.我在整个网站上都有一些链接.其中一些看起来像这样:
<a target="_blank" onclick="someFunction()" href="/somFile.pdf">some file</a>
有些看起来像这样:
<a target="_blank" href="/somFile.pdf">some file</a>
所有链接都应该在单击时调用someFunction().在onclick属性中具有调用的是旧内容页面.较新的页面附加了一个jQuery click事件,如下所示:
$(document).ready(function(){
$('a[href$=".pdf"]').click(function() {
someFunction();
});
});
Run Code Online (Sandbox Code Playgroud)
所以这就是事情.我可以更新someFunction(),但我无法触及实际链接或jQuery.我需要知道点击链接的href值.我尝试在someFunction()中使用以下内容:
var ev = window.event;
origEl = ev.target || ev.srcElement;
console.log(origEl.href);
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我也尝试过console.log(window.event)
什么也没得到,说这是未定义的.知道我在这里缺少什么,或者在调用函数时没有传递引用它基本上是不可能的?
编辑:要清楚,我不能作为短期甚至中期的解决方案编辑someFunction()
onclick或jQuery代码中的调用黑色,所以我不能将它们更改为someFunction(this)
或类似.我不确定是否有可能从someFunction()中获取href,除非我这样做:(
好的,考虑一下这段代码:
var d1 = new Date();
var d2 = d1;
d2.setDate(d2.getDate()+1);
alert(d1 + "\n" + d2);
Run Code Online (Sandbox Code Playgroud)
即使我叫setDate()
上d2
,d1
也正在增加.我理解这是因为d1是d2
通过引用分配的.我的问题是......我怎么不这样做,所以.setDate()
只适用于d2
?
所以我有以下代码:
var element = document.getElementById("myCanvas");
var width = element.width;
var height = element.height;
var context = element.getContext("2d");
/* test 1 */
var img1 = new Image(width, height);
img1.src = "http://www.mydomain.com/image.jpg";
document.body.appendChild(img1); // <-- A: this works
context.drawImage(img1,0,0,width,height); // <-- B: this works
/* test 2 */
var img2 = new Image(width, height);
img2.src = "http://www.notmydomain.com/image.jpg";
document.body.appendChild(img2); // <-- C: this works
context.drawImage(img2,0,0,width,height); // <-- D: this does not work
Run Code Online (Sandbox Code Playgroud)
好的,看看我的代码,test 1
我创建了一个图像对象,其中包含与我的页面托管在同一域上的图片。从A:
我可以看到它加载得很好(A:
并且C:
只是作为测试扔进去以确保 img …
好的,所以我有一个对象,我想将回调函数应用于对象中的所有方法.这是我到目前为止所尝试的:
var namespace = {
foo : 'bar',
foobar : function() { console.log('call from foobar!')},
someFunc : function() { console.log('call from someFunc!')},
someFunc2 : function() { console.log('call from someFunc2!')}
}
var logger = {
_callback : function () {
console.log('call from logger!',arguments);
}
}
for (var m in namespace) {
if ( namespace.hasOwnProperty(m) && (typeof namespace[m]=='function') ) {
logger[m] = namespace[m];
namespace[m] = function() {
logger._callback(arguments);
logger[m].apply(this, arguments);
}
}
}
namespace.foobar('foo');
namespace.someFunc('bar');
namespace.someFunc2('bar2');
Run Code Online (Sandbox Code Playgroud)
这是登录到控制台的内容:
call from logger! [["foo"]]
call …
Run Code Online (Sandbox Code Playgroud) 我有以下perl代码:
use Data::Dumper;
$key = 'foobar:foo:bar';
$pattern = '^[^:]+:([a-z]{3}):(.+)$';
my @matches = $key =~ /$pattern/i;
print Dumper(@matches);
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = 'foo';
$VAR2 = 'bar';
Run Code Online (Sandbox Code Playgroud)
或者我可以print $1
为第一个捕获组,$2
第二个.
我想知道的是如何获得完整的模式匹配.例如,如果我使用PHP preg_match
,我会得到这个:
Array
(
[0] => foobar:foo:bar
[1] => foo
[2] => bar
)
Run Code Online (Sandbox Code Playgroud)
第一个元素(或$ 0或\ 0)是完全匹配的位置.我如何在Perl中获得这个?
背景故事:
所以我的儿子随机向我走来,询问如何编写一个代数(?)表达式来计算根据指定的级别数量制作一套纸牌所需的卡数.我很确定这实际上不是一个家庭作业问题; 如果他需要帮助,他通常会向我展示工作表.
"假设"就是这样
a)每层之间都有水平放置的卡片,用于支撑; 一张卡片作为两个"峰值"之间的"桥梁"b)最低(地平面)层下面没有任何水平卡片,因为地板/桌子本身就是支撑物.
例如,单个图层只有2张卡片: /\
另一个例子:3层共有15张卡(请原谅我糟糕的图片!)
/_\
/_\ /_\
/ \/ \/ \
Run Code Online (Sandbox Code Playgroud)
嗯,我在这种事情上很糟糕.我只知道基本代数,但我想认为自己是一个相当不错的(但不是"专业")程序员.但无论如何,对于一个纯粹的代数公式,我无法提出计算所有卡的公式,但我确实想出了一个公式来计算给定图层的卡数,基于以上假设:2v + (v - 1)
好吧,可能有一个更好/简化的方程式,而且,这仅适用于给定的层,而不是所有层.因此,例如第1层(顶层),v = 1,因此卡的数量为2.或者对于第3层,v = 3,因此卡的数量达到8(因此该公式计算水平支撑作为给定图层的一部分).
而且......就像我用纯代数一样.然而!使用一些计算机代码(javascript是我使用的),我能够根据上面的等式创建一个函数,以返回卡的数量:
function getNumHouseCards(layers) {
var layers = layers || 1;
var cards = 0;
for (var v = 1; v <= layers; v++) {
cards += (2 * v) + (v - 1);
}
return cards;
}
Run Code Online (Sandbox Code Playgroud)
与功能的返回值相比,我做了一些手动计数卡,这看起来是合法的,所以我应该感到高兴,但是......我觉得这可以做得更好.所以..
题:
如何改进?我想首先,有没有办法用代数表达式来编写这个,或者编码真的需要回答这样的事情?在任何一种情况下,我都觉得我已经过度复杂了(好吧,至少我做过的部分......)