jQuery / Javascript - ฉันจะแปลงค่าพิกเซล (20px) เป็นค่าตัวเลข (20) ได้อย่างไร


101

ฉันรู้ว่า jQuery มีวิธีการช่วยเหลือสำหรับการแยกสตริงหน่วยเป็นตัวเลข jQuery method ทำอะไรได้บ้าง?

var a = "20px";
var b = 20;
var c = $.parseMethod(a) + b;

parseInt (a, 10); ส่งคืน NaN ถ้าaเป็นสตริง
vanduc1102

คำตอบ:


184

ไม่จำเป็นต้องใช้ jQuery สำหรับสิ่งนี้Plain Ol 'JS (tm)จะทำคุณ

parseInt(a, 10);

4
ทุกๆวันในทุกๆด้านฉันรักคุณมากขึ้นเรื่อย ๆ จาวาสคริปต์
James Westgate

1
วิธีนี้ใช้ไม่ได้กับ "20pt" หรือ "20em" parseInt ("20pt") == 20! นี่อาจเป็นทั้งหมดที่ผู้โพสต์ต้องการ แต่ฉันต้องการใช้ตัวอย่างเช่น X ("20em") และได้ความกว้างที่แท้จริงกลับมาเป็นพิกเซล
Lawrence I. Siden

2
@lsiden: มันได้ผล parseInt("20em", 10) === 20และparseInt("20pt", 10) === 20. อย่าลังเลที่จะวางนิพจน์ลงในคอนโซลของเบราว์เซอร์ที่คุณชื่นชอบหรือดูตัวอย่างสั้น ๆนี้ ไม่ว่าคุณจะมีปัญหาอะไรอยู่ที่อื่นในโค้ดของคุณ
Andy E

6
Sidenote parseIntฟังก์ชันจะไม่สนใจอักขระที่ไม่ใช่จำนวนเต็มใด ๆ ที่ต่อท้ายสตริงของอักขระจำนวนเต็ม parseInt('234sdfsdf') == 234
Chris W.

3
@AndyE: Isiden บอกว่า parseInt จะไม่แปลงค่า em (หรือ pt หรืออื่น ๆ ) ในค่าพิกเซลที่เท่ากันซึ่งเป็นสิ่งที่บางคนอาจต้องการ
LeartS

30

โดยทั่วไปparseFloatจะประมวลผลตัวเลขทศนิยมอย่างถูกต้องในขณะที่parseIntอาจสูญเสียเลขนัยสำคัญไปอย่างเงียบ ๆ :

parseFloat('20.954544px')
> 20.954544
parseInt('20.954544px')
> 20



0

ขออภัยที่ขุดขึ้นมา แต่:

var bar = "16px";

var foo = parseInt(bar, 10); // Doesn't work! Output is always 16px
// and
var foo = Number(s.replace(/px$/, '')); // No more!

parseInt ('16px', 10); ทำงานให้ฉันในคอนโซลนักพัฒนา Google Chrome
Thomas

-2
$(document).ready(function(){<br>
    $("#btnW1").click(function(){<br>
        $("#d1").animate({<br>
            width: "+=" + x,

        });
    });

เมื่อพยายามระบุตัวแปร x ด้วยค่าพิกเซล I โดยใช้ jquery ฉันใส่เครื่องหมาย + = ในเครื่องหมายคำพูด แทนที่จะมี width: '+ = x' ซึ่งใช้ไม่ได้เพราะคิดว่า x เป็นสตริงแทนที่จะเป็นตัวเลข หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.