在每个匹配字符串的元素中获取正确的元素

时间:2016-02-16 12:58:56

标签: jquery this each element

我想使用.each()遍历DOM元素,并找到与变量具有相同.text()的特定元素。如果正确的元素是最后一个兄弟,则会出现问题。

示例:

<p> wrong </p>
<p> wrong </p>
<p> right </p>

在进入此代码中的正确元素之前,它将经历两个错误的元素。我无法删除else因为我需要查看是否所有元素都没有此文本,如果没有,则应该发生其他事情。现在它将是假两次并将创建2个新<p>然后当它到达最后一个元素时它将抛出alert()。还有其他办法吗?

$('p').each(function() {
    if ($(this).text() == "right") {
        alert("this exists already");
        return false;
    } else {
        // A p will be created with text right
    }
});

4 个答案:

答案 0 :(得分:1)

可以使用filter()进行此操作,您需要删除空格,否则您的匹配将根据显示的内容进行操作。

var myVar = 'right';

var exists = $('p').filter(function() {
  return $(this).text().trim() === myVar;
}).length;// length of collection will determine if filter has matches

if(!exists){
   // add element
}

答案 1 :(得分:1)

你根本不需要循环。

只需使用:contains()选择器。

&#13;
&#13;
// alert the user if there is at least one <p>right</p> element
if ($('p:contains("right")').length) {
  alert("this exists already");
  
} else {
  // A p will be created with text right
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p> wrong </p>
<p> wrong </p>
<p> right </p>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我很确定这是你要求的。

// We care that it exists or not
var already_exists = false;
// Iterate through the existing elements
$('p').each(function() {
    // If it exists, store that and break the loop because we don't need to check any more
    if ($(this).text() == "right") {
        already_exists = true;
        return false;
    }
});

// If, after checking (possibly) all elements, it exists, shout, else create it
if (already_exists){
   alert("this exists already");
}else{
   // A p will be created with text right
}

请注意

我不确定,.text()上的<p> right </p>是否匹配&#34; right&#34;因为白色空间。你可能想修剪它。 if ($.trim($(this).text()) == "right")

答案 3 :(得分:0)

之前和之后的文本空间中的问题所以请修剪您的文本,如下所示

import java.io.File;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Radio {

    public static void main(String[] args) {
        WebDriver driver=new FirefoxDriver();
        driver.get("http://echoecho.com/htmlforms10.htm");

        File f1 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(f1, "E:\\Pessoal\\QTPSelenium\\Screenshot1.jpg");

        File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(scrFile, new File("File Location\\File Name"),true);

        File scrFile1 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        // Now you can do whatever you need to do with it, for example copy somewhere
        FileUtils.copyFile(scrFile1, new File("c:\\tmp\\screenshot.png"));

        driver.manage().window().maximize();
        List<WebElement> allRadios= driver.findElements(By.name("group1"));
        System.out.println("Total -->"+allRadios.size());

        System.out.println("Before");
        System.out.println(allRadios.get(0).getAttribute("checked"));
        System.out.println(allRadios.get(1).getAttribute("checked"));       
        System.out.println(allRadios.get(2).getAttribute("checked"));
        allRadios.get(0).click();
        System.out.println("After");
        System.out.println(allRadios.get(0).getAttribute("checked"));
        System.out.println(allRadios.get(1).getAttribute("checked"));       
        System.out.println(allRadios.get(2).getAttribute("checked"));



    }

}