小编JVG*_*JVG的帖子

Javascript - 功能只运行一次,但永远不会再运行

我正在构建一个非常简单的灯箱脚本; 单击按钮时,将创建灯箱.当您单击灯箱背景时,它将被删除.

第一次调用该函数时它工作得很好.点击按钮,灯箱显示,点击灯箱,它就会消失.但是,如果您尝试单击"再次"按钮,则不会发生任何操作 - 不会调用div.没有控制台错误或任何东西,不知道是什么问题.

JSFIDDLE http://jsfiddle.net/3fgTC/

function closeLightBox(){
        document.body.removeChild(lightBox);
}

function createElem(){
    var elem = "<div id='lightBox'></div>";
    var bodyElem = document.body;
        bodyElem.innerHTML = elem + bodyElem.innerHTML;
    var lightBox = document.getElementById("lightBox");
        lightBox.style.width = "100%";
        lightBox.style.height = "800px";
        lightBox.style.backgroundColor = "rgba(0,0,0,.5)";
        lightBox.onclick = function(){
            closeLightBox();
        }
}
var button = document.getElementsByClassName("btn");
    for (var i = 0; i<button.length; i++){
        button[i].onclick = function(){
            createElem();
        }
    }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

javascript

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

获取元素的子文本的方法,无论是否在<p>标记中

我正在建造一个刮刀,Node.js并且遇到了一个小问题.我正在尝试构建一个获取元素文本的函数,无论它是嵌入到<p>标记中,<span>还是嵌入到<div>文本内部.

以下内容目前仅适用于<p>标记中包含的文本:

function getDescription(product){
    var text =[];
    $('.description *')
        .each(function(i, elem) {
            var dirty = $(this).text();
            var clean = sanitize(dirty).trim();
            if (clean.length){
                text.push(clean);
            }
        });
    text.join(',');
    sanitize(text).trim();
    return text;
}
Run Code Online (Sandbox Code Playgroud)

这适用于这样的代码:

<div class="description">
    <p>Test test test</p>
</div>
Run Code Online (Sandbox Code Playgroud)

但不适用于此:

<div class="description">
    Test test test
</div>
Run Code Online (Sandbox Code Playgroud)

作为参考,sanitizetrim函数是其中的一部分Node Validator,但这与我的问题并不特别相关 - 它们只是取一个字符串并从中删除空格.

关于如何使一个功能适用于BOTH实例的任何想法?为了增加对伤害的侮辱,我稍微有点限制node使用cheerio库来复制某些功能jQuery,但不是全部.

javascript jquery node.js

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

Javascript - 将元素放在var中但不能更改样式

我有一个单击元素时调用的函数.

function showHide(elem){    
        var clickedText = elem.getElementsByTagName("p");
        clickedText.style.color = "green";

    }
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我得到了一个Uncaught TypeError: Cannot set property 'color' of undefined.但是,如果我这样做console.log(clickedText),请记录相应的

标签.不能为我的生活弄清楚为什么这不起作用,我错过了一些完全明显的东西吗?

javascript

0
推荐指数
2
解决办法
67
查看次数

确定jQuery选择器的元素类型

如果我有两个这样的DOM元素:

<img id="test1" src="xyz" />

<a id="test2" href="#">Test 2</a>

我在jQuery中选择它们是这样的:

$('#test1')$('#test2')

我希望能够返回imga分别.使用vanilla Javascript或jQuery,最好的方法是什么?

javascript jquery

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

ExpressJS和Angular - "离开"应用程序进行服务器端身份验证

我的应用程序在NodeJS,ExpressJS和AngularJS上运行.我正在尝试使用PassportJS进行Facebook身份验证.为了避免发布一堆不必要的代码,让我们假设Passport代码按预期工作并登录到Facebook,抓取令牌并收到响应.

在ExpressJS中,我的路由设置如下:

app.get('/', routes.index);
app.get('/fbauth', passport.authenticate('facebook', { scope: 'email' }));
app.get('/fbauthed', passport.authenticate('facebook',{ failureRedirect: '/' }), routes.loggedin);
app.get('/logout', function(req, res) {
  req.logOut();
  res.redirect('/');
});
Run Code Online (Sandbox Code Playgroud)

我的服务器设置为localhost:3000.

我的问题是Angular完全没有表现出来.当我在我的页面上放置一个链接href="/fbauth"(这转到localhost:3000/fbauth)时,我看到地址栏改变localhost:3000/fbauth为一瞬间,然后我的localhost:3000主页重新加载.

但是,如果我输入localhost:3000/fbauth地址栏,验证就会发生,我会传递给Facebook - > localhost:3000/fbauthed.

认为这是因为Angular路由试图"接管" <a>链接中的URL ,但我不知道如何实现它.我已经尝试将我的Angular路由配置为:

when('/fbauth', {
        redirectTo: '/fbauth'
      }).
Run Code Online (Sandbox Code Playgroud)

但这会加载一个空白屏幕.我怎样才能让两者一起工作?

javascript node.js express angularjs passport.js

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

AngularJS 1.2的ngBindHtml不处理/ r&/ n

我有一个看起来像这样的字符串(很多空格,这就是它在我的服务器上的出现方式):

 var care_description = "MATERIAL\r\n    \r\n  56% Acrylic, 24% Rayon, 20% Polyester\r\n \r\n  CARE\r\n  \r\n  Machine Wash, Gentle Or Delicate"
Run Code Online (Sandbox Code Playgroud)

我正在使用新的Angular 1.2.0ngBindHtml并在我的控制器中处理它,如下所示:

    $scope.care = $sce.trustAsHtml(care_description);
Run Code Online (Sandbox Code Playgroud)

(该$scope.records[i].accordions数组只是Angular-Bootstrap的Accordions模块的包装器).

当我将它放入我的视图(通过一个简单的<p ng-bind-html="care"></p>)时,它会像这样呈现:

 MATERIAL 56% Acrylic, 24% Rayon, 20% Polyester CARE Machine Wash, Gentle Or Delicate
Run Code Online (Sandbox Code Playgroud)

它应该是:

MATERIAL

56% Acrylic, 24% Rayon, 20% Polyester 

CARE 

Machine Wash, Gentle Or Delicate
Run Code Online (Sandbox Code Playgroud)

这里唯一的解决方案是让我做一个正则表达式替换来查找所有实例\r\n并替换它们<br />吗?

编辑:我应该提到,虽然HTML上面的例子中没有标签,但通常会有这样我需要在ngBindHtml这里使用而不是<pre>标签.

javascript angularjs ng-bind-html

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

检查数组是否已定义且具有长度

我有这样的javascript查询,用于检查undefined数组和empty数组:

if(array){
    if(array.length > 0){
       function1();
    }else{
       function2();
    }
}else{
    function2();
}
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西

if(array && ( array.length > 0)){
    function1();
}else{
    function2();
}
Run Code Online (Sandbox Code Playgroud)

但没有骰子,得到一个variable is undefined错误.根据这个答案if(variable)作品只是罚款这种用例,但字符串,而不是数组这仅适用.在这样的情况下,有没有办法在javascript中做二合一?

javascript performance if-statement

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

使用背景页面和内容脚本的Chrome扩展程序

我无法绕过Chrome扩展程序的结构。

我的扩展程序有两个不同的部分:

  1. 它使用后台页面通过oAuth登录,然后从oAuth整理大量数据并将其保存到chrome.storage.local

  2. 浏览网页时,它会调用来chrome.storage.local检查当前域是否与从oAuth存储的信息匹配,如果匹配,则使用[Rich Notifications API][1]

我的结构manifest.json很糟糕。

{
  "name": "API Test",
  "version": "3.1.2",
  "manifest_version": 2,
  "minimum_chrome_version": "29",
  "app": {
    "background": {
      "scripts": ["main.js"]
    }
  },
  "permissions": ["identity", "storage", "*://*/*"],
  "oauth2": {
    "client_id": "<<client_id>>",
    "scopes": [
      "https://www.googleapis.com/auth/plus.login",
      "https://www.google.com/m8/feeds",
      "https://www.googleapis.com/auth/contacts.readonly"
    ]
  },
  "content_scripts": [
    {
      "matches": ["*://*/*"],
      "js": ["domchecker.js"]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这样做时,我从Chrome收到以下错误:

There were warnings when trying to install this extension:
'content_scripts' is only allowed for extensions and 
legacy packaged apps, but this is …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome oauth google-chrome-extension

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

Chrome扩展程序:自动下载使用'chrome.tabs.captureVisibleTab'拍摄的屏幕截图

我是Chrome扩展程序/自动下载的新手.我有一个背景页面,其中包含可见网页的屏幕截图chrome.tabs.captureVisibleTab().在我的弹出窗口中,我有:

chrome.tabs.captureVisibleTab(null, {}, function (image) {
  // Here I want to automatically download the image
});
Run Code Online (Sandbox Code Playgroud)

我已经做了类似的事情blob,但我完全不知道如何下载图像以及如何自动完成.

在实践中,我希望我的Chrome扩展程序能够在加载特定页面时自动截图+下载图像(我猜这必须通过让我的内容脚本与我的后台页面对话来实现,对吗?)

javascript screenshot google-chrome google-chrome-extension

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

将字符串转换为javascript对象

我正在调用Google表格API中的数据,每行的内容如下所示:

 {
   $t: "title: Test Title, gamelabel: Test Game, startdate: 2016-06-14"
 }
Run Code Online (Sandbox Code Playgroud)

是否有任何现成的/简单的方法将此字符串转换为此格式的javascript对象?

{
 title : 'Test Title',
 gamelabel: 'Test Game',
 startdate: '2016-06-14
}
Run Code Online (Sandbox Code Playgroud)

注意,键需要是动态的(为表单的标题创建键),因此无法准确知道键将在哪些键中$t.

更新:使用JSON.parse()在这里不起作用,我想通过以下方式实现此目的有一种hacky-ish方式:

 var temp = {};
 var params = $t.split(/:/g);
 for(var i = 0; i<params.length; i += 2){
  temp[params[i].trim()] = params[i + 1].trim(); 
 }
Run Code Online (Sandbox Code Playgroud)

这实际上不适用于提供的格式/可能是一个开始,但我不知道这里的最佳做法是什么.

javascript

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

你如何优化NodeJS/Express上的内存/ CPU?

我有一个基于Express的Node应用程序,它使用Web scraper加载和解析数据.

我已经阅读了很多关于NodeJS的可扩展性以及能够处理一堆并发连接的内容,但是当你运行一个web scraper(发送1000多个并发请求)时,我觉得事情开始崩溃了一点.

运行时,我的服务器对其他API请求没有响应,并且一次运行多个实例会导致速度降低到蜗牛的速度.

我找不到任何关于限制是什么,它们应该是什么,我应该聚集在一起的请求数等等的文档.

我应该将刮刀的要求限制为每秒10次吗?每秒100?每秒1000?或者我可能会增加在我的VPS上分配给我的节点进程的CPU /内存量?

编辑:对于那些投票结束的人,因为这个问题太基于意见,这具体是我要问的:

  1. Express应用程序在开始达到性能之前可以同时执行多少HTTP请求
  2. 增加应用程序可用的内存/ CPU是否有帮助?

javascript vps node.js web-scraping express

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