Saya mencoba menghitung lebar teks menggunakan jQuery. Saya tidak yakin apa, tapi saya pasti melakukan sesuatu yang salah.
Jadi, inilah kodenya:
var c = $('.calltoaction');
var cTxt = c.text();
var cWidth = cTxt.outerWidth();
c.css('width' , cWidth);
Jawaban:
Ini bekerja lebih baik untuk saya:
sumber
'</span>'
, meskipun tampaknya tidak ada bedanya (bekerja dengan atau tanpa titik koma di FF9).Berikut adalah fungsi yang lebih baik daripada yang diposting lainnya karena
<input>
,<span>
, atau"string"
.Demo: http://jsfiddle.net/philfreo/MqM76/
sumber
Solusi saya
Pada dasarnya peningkatan dari Rune, yang tidak digunakan
.html
dengan mudahsumber
/
sebelum tanda kurung tutup dari<span>
tag:calculator = $('<span style="display: inline-block;" />'),
The
textWidth
fungsi yang disediakan dalam jawaban dan yang menerimastring
sebagai argumen tidak akan memperhitungkan terkemuka dan trailing spasi putih (yang tidak diberikan dalam wadah dummy). Juga, mereka tidak akan bekerja jika teks berisi markup html apa pun (sub-string<br>
tidak akan menghasilkan keluaran apa pun dan
akan mengembalikan panjang satu spasi).Ini hanya masalah untuk
textWidth
fungsi yang menerima astring
, karena jika elemen DOM diberikan, dan.html()
dipanggil ke elemen tersebut, mungkin tidak perlu memperbaikinya untuk kasus penggunaan seperti itu.Tetapi jika, misalnya, Anda menghitung lebar teks untuk secara dinamis mengubah lebar
input
elemen teks saat pengguna mengetik (kasus penggunaan saya saat ini), Anda mungkin ingin mengganti spasi di depan dan di belakang dengan
dan menyandikan string ke html.Saya menggunakan solusi philfreo jadi berikut adalah versi yang memperbaiki ini (dengan komentar tentang tambahan):
sumber
font-size
. Saya harus menambahkannyacss('font-size'), this.css('font-size'))
agar berfungsi. Ada ide mengapafont
saja tidak menyalin nilai itu?.css
metode yang ada , tetapi saya melihat tanda kurung saya salah. Seharusnyacss('font-size', this.css('font-size'))
.Fungsi lebar jQuery bisa sedikit teduh saat mencoba menentukan lebar teks karena model kotak yang tidak konsisten. Cara yang pasti adalah dengan memasukkan div di dalam elemen Anda untuk menentukan lebar teks yang sebenarnya:
Untuk menggunakan plugin mini ini, cukup:
sumber
span
Anda hanya mendapatkan nol. Mencoba solusi ini padaH2
, di mana elemen induk telah melimpah tersembunyi, dan saya hanya mendapatkan panjang teks yang terpotong. Mungkin penjelasan tentang bagaimana ini seharusnya bekerja akan membantu membuatnya bekerja lebih baik?Saya menemukan solusi ini berfungsi dengan baik dan mewarisi font asal sebelum mengukur:
sumber
org.css("font-weight")
. Juga, saya akan mengatakan bahwaif(!text)
bagian itu tidak intuitif. Jika saya menggunakan misalnya,jQuery("#someContainer").textWidth("Lorem ipsum")
saya ingin mengetahui lebar teks "Lorem ipsum" ketika diterapkan dalam wadah tertentu.Baik Rune maupun Brain tidak bekerja untukku jika elemen yang menahan teks memiliki lebar tetap. Saya melakukan sesuatu yang mirip dengan Okamera. Ini menggunakan lebih sedikit penyeleksi.
EDIT: Ini mungkin tidak akan berfungsi untuk elemen yang menggunakan relatif
font-size
, karena kode berikut memasukkanhtmlCalc
elemen ke dalambody
sehingga kehilangan informasi tentang relasi orang tua.sumber
this
sudah menjadi objek jQuery jadi$(this)
redundan.Jika Anda mencoba melakukan ini dengan teks di kotak pilih atau jika keduanya tidak berfungsi, coba yang ini:
atau
jika Anda ingin mengambil teks terlebih dahulu
sumber
masalahnya, Anda melakukan kesalahan, bahwa Anda memanggil metode pada cTxt, yang merupakan string sederhana dan bukan objek jQuery. cTxt sebenarnya adalah teks yang terkandung.
sumber
Sedikit perubahan ke Nico's, karena .children () akan mengembalikan himpunan kosong jika kita mereferensikan elemen teks seperti h1 atau p . Jadi kita akan menggunakan .contents () sebagai gantinya, dan menggunakan ini sebagai ganti $ (this) karena kita membuat metode pada objek jQuery.
sumber
Setelah mengejar hantu selama dua hari, mencoba mencari tahu mengapa lebar teks salah, saya menyadari itu karena spasi putih dalam string teks yang akan menghentikan perhitungan lebar.
jadi, tip lainnya adalah memeriksa apakah spasi putih menyebabkan masalah. menggunakan
ruang non-breaking dan lihat apakah itu memperbaikinya.
fungsi lain yang disarankan orang bekerja dengan baik juga, tetapi ruang putih yang menyebabkan masalah.
sumber
white-space: nowrap
ke inline CSS untuk menghindari ini.Jika Anda mencoba menentukan lebar campuran node teks dan elemen di dalam elemen tertentu, Anda perlu membungkus semua konten dengan wrapInner () , menghitung lebarnya, lalu membuka isinya.
* Catatan: Anda juga perlu memperluas jQuery untuk menambahkan fungsi unwrapInner () karena tidak disediakan secara default.
sumber
Memperluas jawaban @ philfreo:
Saya telah menambahkan kemampuan untuk memeriksa
text-transform
, karena hal-hal sepertitext-transform: uppercase
biasanya cenderung membuat teks lebih lebar.sumber
sumber
Panggil getColumnWidth () untuk mendapatkan teks. Ini bekerja dengan baik.
Catatan: - Jika Anda ingin inline .css teruskan detail font dalam gaya saja.
sumber
Saya memodifikasi kode Nico agar sesuai dengan kebutuhan saya.
Saya menggunakan .contents () karena .children () tidak mengembalikan node teks yang saya butuhkan. Saya juga menemukan bahwa lebar yang dikembalikan dipengaruhi oleh lebar viewport yang menyebabkan pembungkusan jadi saya menggunakan white-space: nowrap; untuk mendapatkan lebar yang benar terlepas dari lebar viewport.
sumber
hampir satu kapal. Memberi Anda dengan karakter pertama
sumber
Saya tidak bisa mendapatkan solusi apa pun yang terdaftar untuk bekerja 100%, jadi buatlah hibrida ini , berdasarkan ide dari @chmurson (yang pada gilirannya didasarkan pada @Okamera) dan juga dari @philfreo:
Catatan:
this
di dalam metode ekstensi jQuery sudah menjadi objek jQuery, jadi tidak perlu semua tambahan yang$(this)
dimiliki banyak contoh.white-space: nowrap
, hanya untuk memastikan bahwa itu mengukurnya sebagai satu baris (dan bukan garis pembungkus berdasarkan gaya halaman lain).font
sendiri dan harus menyalin secara eksplisitfont-size
juga. Belum yakin mengapa (masih menyelidiki).@philfreo
itu.sumber
Terkadang Anda juga perlu mengukur tinggi tambahan dan tidak hanya teks , tetapi juga lebar HTML . Saya mengambil jawaban @philfreo dan membuatnya lebih fleksibel dan berguna:
sumber
lebar teks bisa berbeda untuk orang tua yang berbeda, misalnya jika Anda menambahkan teks ke dalam tag h1 akan lebih lebar dari div atau label, jadi solusi saya seperti ini:
sumber
Saya mengalami masalah dengan solusi seperti @ rune-kaagaard untuk teks dalam jumlah besar. Saya menemukan ini:
JSFiddle GitHub
sumber
saya pikir Anda harus menggunakan
$('.calltoaction').val;
juga, saya akan menggunakan id (#) daripada kelas untuk itu .. jika u memiliki lebih dari satu kelas yang bagaimana cara mengatasinya?
sumber