2009-05-25 17 views
6

mam to HTML:jak wybrać tylko górny tekst elementu?

<span class="price"> 
     $61.00 
       <span class="detailFreeShipping">With Free Shipping</span> 
    </span> 

Jak napisać selektor jquery, które dają mi tekst cen tylko "$ 61.00"?

Chcę, aby był ogólny, jak mogę, ponieważ może być w niektórych przypadkach nie ma wewnętrznej rozpiętości, tylko rodzica.

Odpowiedz

11

Można to zrobić tak jak ten

var price = $(".price").textOnly(); 

dostaniesz żądaną wartość.

+0

po prostu zamień "textOnly =" na "textOnly:" –

+0

Dzięki, miałem go jako samodzielną funkcję, ale zdecydowałem się przedłużyć ją w ostatniej minucie. –

0

Nie wiem, jQuery, ale tylko pseudo-odpowiedzieć na to pytanie, można to zrobić poprzez:

jQuery.fn.extend({ 
    textOnly: function() { 
     // make a clone of this object so we are not changing the actual DOM 
     var obj = $(this).clone(); 

     // remove all the children, i.e. any DOM objects 
     obj.children().remove(); 

     // get the text value after all DOM elements are removed 
     return obj.text(); 
    } 
}); 

następnie można go nazwać:

var elem = document.getElementById('yourid'); // or document.getElementsByTagName('span')[0]; 
var text = elem.innerHTML; 
text = text.substr(0, (text.indexOf('<') > -1 ? text.indexOf('<') : text.length)); 
0

próbą:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <script type="text/javascript" src="http://www.google.com/jsapi"></script> 
    <script type="text/javascript" charset="utf-8"> 
     google.load("jquery", "1.3"); 
    </script> 
    <script type="text/javascript" charset="utf-8"> 
     $(document).ready(function(){ 
      var white_out = $("span[class=price] :first-child").text(); 
      var all = $("span[class=price]").text(); 
      var price = all.replace(white_out, ""); 
      alert(price); 
     }); 
    </script> 
</head> 
<body> 
    <span class="price"> 
      $61.00 
       <span class="detailFreeShipping">With Free Shipping</span> 
     </span> 
</body> 
</html> 

gdzie linie:

  var white_out = $("span[class=price] :first-child").text(); 
      var all = $("span[class=price]").text(); 
      var price = all.replace(white_out, ""); 

może wykonywać pracę na jednym elemencie.

+0

co, jeśli cena jest druga w elemencie? pierwotny autor poprosił, aby był jak najbardziej ogólny. –

+0

to nadal działa, ponieważ pierwsze dziecko zostaje oczyszczone, ponieważ w twoim (bardziej eleganckim) rozwiązaniu wszystkie elementy dzieci zostają oczyszczone. kolejność nie ma znaczenia, ani jeśli w ogóle istnieje element potomny; uważam to za "ogólne, jak to możliwe" dla przedstawionego problemu ... – miku

Powiązane problemy