在jquery中对变量使用.find()

时间:2017-03-15 04:55:00

标签: jquery

我一直在桌子上撞了一会儿,我希望有人可以提供帮助。基本上在这里我有divs,在创建时分配了一对#class。我正在尝试创建一个事件,在drop上检查事件发生的div内div中的第3个索引项,然后检查它的div对中的同一个项目是否匹配。希望我能在评论中解释这一点。所以这就是我所拥有的:

console.log($(this)[0].classList[3])
// logs pair0 in this case, but could pull any of the pair#s, which is what I need.

var currentPair = $(this)[0].classList[3]
//sets to pair0
console.log(currentPair)

var pairDivs = currentPair.find("div")
//errors: currentPair.find is not a function

var pairDivs2 = $(currentPair).find("div")
//errors: Syntax error, unrecognized expression: ".pair0" 

var currentPair2 = '\".' + $(this)[0].classList[3] + '\"'
// my attempt to make it the string ".pair0"
console.log(currentPair2)
// logs ".pair0"

var pairDivs3 = $(currentPair2).find("div")
//errors: Syntax error, unrecognized expression: ".pair0"

var pairDivs4 = $('.pair0').find("div")
//manually putting in the pair, which no longer allows the content to be dynamic
console.log(pairDivs);
//brings up the divs needed


if (pairDivs4[0] != undefined && pairDivs4[1] != undefined) {
//makes sure both buckets have items in them
  if (pairDivs4[0].classList[4] == pairDivs4[1].classList[4]) {
  //compares 5 class of both divs inside the pair divs
    var newStatus = pairDivs4[1].classList[4] + 'Text'
		console.log(newStatus)
    //in this case logs strongText
		$('#currentStatus').addClass(newStatus)
    //adds the class strongText to the div with id currentstatus
	}
}

基本上我根据任务的复杂程度创建了多个配对存储桶。类列表中的第三项始终是#对。我希望能够把它放在$([变量对#到这里])。find(“div”)所以我可以在drop事件上检查这些对。我不知道为什么我不能让它发挥作用。我环顾四周,找不到任何东西。我是一名新生,所以也许我错过了一些东西。我希望你能提供帮助。

1 个答案:

答案 0 :(得分:0)

鉴于$(this)[0].classList[3]返回字符串'pair0' - 注意引号是不是字符串的一部分 - 要将其用作类选择器,您需要添加一个'.'开头,获取字符串'.pair0'。所以:

var currentPair = '.' + $(this)[0].classList[3]
var pairDivs = $(currentPair).find("div")

演示:https://jsfiddle.net/a6h9ru92/

至于为什么你的尝试不起作用:

var currentPair = $(this)[0].classList[3]
var pairDivs = currentPair.find("div")
//errors: currentPair.find is not a function

在上述情况中,currentPair只是一个字符串,字符串没有.find()函数。

var pairDivs2 = $(currentPair).find("div")
//errors: Syntax error, unrecognized expression: ".pair0" 

pairDivs2情况下,引用的错误没有意义,因为您的代码在字符串中添加'.'。我认为你必须将错误信息与下一个错误信息混淆。

var currentPair2 = '\".' + $(this)[0].classList[3] + '\"'
// my attempt to make it the string ".pair0"
console.log(currentPair2)
// logs ".pair0"
var pairDivs3 = $(currentPair2).find("div")
//errors: Syntax error, unrecognized expression: ".pair0"

pairDivs3情况下,您实际上是在字符串中附加引号,因此“无法识别的表达式”是因为您正在生成字符串'".pair0"'(其中单个引号不是字符串值的一部分,但 double 引号是)。

顺便说一下,使用.classList[3]是一种非常脆弱的工作方式,因为如果你关心的类不完全是.classList返回的第四个类,那么显然会破坏。使用data-属性可能要好得多,比如data-pair="1"而不是class="pair1"。您可以使用$('[data-pair="1"]')选择该属性,因此:

var currentPair = $(this).attr('data-pair')
var pairDivs = $('[data-pair="' + currentPair + '"]').find("div")